如何检查偶数位和奇数位(数组内)的值是否相同?

时间:2016-01-28 19:10:19

标签: arrays ruby algorithm

假设我有一个大小在700.000到800.000之间的数组,我需要迭代它来完成一些奇特的任务。

对于"相同的偶数和奇数位置"我的意思是:

[0,0,1,1,2,2,3,3] // even and odd are the same

[0,1,1,1,2,2,3,3] // even and odd are not the same (arr[0] and arr[1] are differents)

[0,0,1,1,2,2,3] // even and odd are not the same (last value missing)

如果偶数和奇数位置的值相同,我需要将此函数应用于每个值:

transition_left_right << i*@maxS

如果偶数和奇数不同,我必须将此函数应用于每个偶数值:

transition_left << i*@maxE

和每个奇数值:

transition_right << i*@maxO

最快的方法是什么? (没有多次迭代巨大的数组)。最好的是1次迭代......

2 个答案:

答案 0 :(得分:2)

试试这个。

# odd/even always the same?
[1,1,2,2,3].each_slice(2).all? { |a,b| a == b }
#=> false

# hope I got your explaination right
@maxO, @maxE = 2, 3
[1,1,2,2,3].each_slice(2).flat_map do |odd,even|
  odd == even ? [odd,even] : [odd*@maxO, even && even*@maxE]
end.compact
#=> [1, 1, 2, 2, 6]

答案 1 :(得分:1)

正如@ sschmeck的回答所示,Enumerable#each_slice是要走的路。我假设transition_left_righttransition_lefttransition_right@maxS@maxO@maxE是已存在的变量,{ {1}}是数组中的偶数或奇数值。

如果是这样,那么我想你想要这个:

i