在ruby数组中查找距离对

时间:2013-05-05 22:36:12

标签: arrays ruby ruby-2.0

我有一个包含一系列值的大数组。 检查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

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

1 个答案:

答案 0 :(得分: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