数组 – 如何从数组中删除相反的值?

我有一个问题,我正在尝试创建一个方向数组,其中每个方向都不是多余的.
plan = ["norTH","SOUTH","EAST","WEST","norTH","WEST"]

正如您所看到的,此计划中的大多数值都是多余的,您也可以简单地告诉该人去“西部”.

plan = ["norTH","EAST"]

我还希望上面的计划返回一个空数组.

解决方法

鉴于一系列方向:
plan = %w[norTH SOUTH SOUTH EAST WEST norTH WEST]
#=> ["norTH","WEST"]

我会将方向转换为x和y坐标:

x,y = 0,0

plan.each do |direction|
  case direction
  when 'norTH' then y += 1
  when 'EAST'  then x += 1
  when 'SOUTH' then y -= 1
  when 'WEST'  then x -= 1
  end
end

norTH’递增y,’SOUTH’递减y,同样对’EAST’/’WEST’和x递减.

使用示例数组,它给出:

x #=> -1
y #=> 0

这些必须转换回一系列方向:

[
  *Array.new(y.abs) { y.positive? ? 'norTH' : 'SOUTH' },*Array.new(x.abs) { x.positive? ? 'EAST' : 'WEST' }
]
#=> ["WEST"]

虽然这不是最短的代码,但掌握IMO相对容易.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...