2013-05-05 85 views
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 

,但它看起来复杂我不知道,如果,如果我把它缩短,清晰

回答

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