2

我有一个包含一系列值的大数组。要检查位置 x 上的值是否对位置 x+距离上的值有影响,我想找到所有对

pair = [values[x], values[x+1]]

以下代码有效

pairs_with_distance = []
values.each_cons(1+distance) do |sequence| 
  pairs_with_distance << [sequence[0], sequence[-1]]
end

但它看起来很复杂,我想知道我是否让它更短更清晰

4

1 回答 1

2

您可以通过map直接使用使代码更短:

pairs_with_distance = values.each_cons(1 + distance).map { |seq| 
  [seq.first, seq.last]
}

我更喜欢下面的示例,因为它具有简短易读的代码行,并且因为它分离了步骤——这种方法允许您为中间计算(groups在本例中)赋予有意义的名称。您可能会根据应用程序的真实域想出更好的名称。

values   = [11,22,33,44,55,66,77]
distance = 2

groups = values.each_cons(1 + distance)
pairs  = groups.map { |seq| [seq.first, seq.last] }

p pairs
于 2013-05-05T22:56:03.923 回答