Ruby检查数组,返回索引,存在哪些数据

时间:2014-07-23 15:48:41

标签: ruby arrays

如何检查数组中的数据是否为nil,然后返回该数据的索引? 示例:

myary = [nil, nil, 300, nil, nil] # <= index 2 is 300

现在有一种获取值2的方法吗?我们知道指数2是300而不是零。 我需要得到的索引不是值。而且可能只有一个元素不是nil,也许数组可能就像这样

myotherary = [nil, nil, 300, 400, nil] # <= index 2,3 = 300,400

现在为此我需要获得2和3的值,这是否可以吗? 好的,非常感谢,我感谢所有的回答。

P.S:请不要燃烧,如果你不想帮忙那么就离开,我花了一些时间来解决这个问题但没有成功。如果我能自己解决,我不会在这里问。我有足够的人没有帮助,而是问“你尝试过什么方法?”或者写一些其他实际上没有帮助但却令人厌恶的东西。

2 个答案:

答案 0 :(得分:3)

您可以使用map.with_index

myary.map.with_index { |v, i| i if v }.compact
# => [2]
myotherary.map.with_index { |v, i| i if v }.compact
# => [2, 3]

答案 1 :(得分:0)

我倾向于使用Enumerable#select部分因为它读得很好;单词&#34;选择&#34;描述你想做什么。

<强>代码

仅针对指数:

def indices_only(arr)
  arr.size.times.select { |i| arr[i] }
end

如果返回非零值和相应的索引会更有用:

def values_and_indices(arr)
  arr.each_with_index.select(&:first)
end

<强>实施例

arr1 = [nil, nil, 300, nil, nil]
arr2 = [nil, nil, 300, 400, nil]

indices_only(arr1)       #=> [2]
indices_only(arr2)       #=> [2, 3]

values_and_indices(arr1) #=> [[300, 2]]
values_and_indices(arr2) #=> [[300, 2], [400, 3]]