我有一个包含一系列值的大数组。要检查位置 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
但它看起来很复杂,我想知道我是否让它更短更清晰
您可以通过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