返回值不相同的数组索引

时间:2018-11-06 20:38:42

标签: arrays ruby

我有两个数组A []和B []。例如A [网络,HTTP,SMTP]和B [成功,成功,成功]。

A包含所有服务名称,b处于状态。

要检查我使用的相同值:

B.all? { |x| x == B[0] }

因为第一价值永远是成功。

我需要检查数组B的值是否全部相同,如果不相同,则返回不匹配的索引。

我需要知道一种有效的方法。

3 个答案:

答案 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]