我有两个数组A []和B []。例如A [网络,HTTP,SMTP]和B [成功,成功,成功]。
A包含所有服务名称,b处于状态。
要检查我使用的相同值:
B.all? { |x| x == B[0] }
因为第一价值永远是成功。
我需要检查数组B
的值是否全部相同,如果不相同,则返回不匹配的索引。
我需要知道一种有效的方法。
答案 0 :(得分:3)
鉴于数组arr
,我假设目标是返回i > 0
的最小索引arr[i] != arr[i-1]
。
arr = [1, 1, 1, 3, 1, 4]
first = arr.first
arr.index { |i| arr[i] != first }
#=> 3
如果数组为空或数组的所有元素均相等,则返回 nil
。
答案 1 :(得分:2)
怎么样:
my_array = [1, 1, 1, 3, 1, 4]
indexes = []
my_array.each_with_index do |item, index| indexes << index unless item == my_array[0] end
indexes # [3, 5]
答案 2 :(得分:0)
鉴于数组ary = [1, 1, 1, 3, 3, 3, 3, 3, 3, 1, 4, 4, 4]
,无法确定哪个整数前导,但是您可以找到不连续的索引:
ary.each.with_index.with_object([]){ |(x, idx), o| o << idx + 1 if x != ary[idx + 1] }
#=> [3, 9, 10, 13]
或者在第一个元素也被视为不连续的情况下:
ary.chunk_while { |a,b| a == b }.map(&:count).inject([0]) { |x, y| x + [x.last + y] }
#=> [0, 3, 9, 10, 13]