array = [nil, 3, nil, nil]
返回非nil
的值,我使用array.select {|a| a.present?}
如何返回索引位置?例如,返回一个以position为键的哈希表。
预期输出:
{1=>3}
您可以使用array# compact以更优雅的方式删除nil:
arr = [nil, 3, nil, nil]
arr.compact # => [3]
然后你可以使用array# each_index做你想做的事情。例如:
Hash[arr.each_index.zip(arr)]
我会首先将数组转换为position => element
哈希(参见将数组转换为哈希,其中键是索引):
hash = array.map.with_index { |e, p| [p, e] }.to_h
#=> {0=>nil, 1=>3, 2=>nil, 3=>nil}
然后过滤:
hash.reject { |k, v| v.nil? }
#=> {1=>3}
Try This
1.9.3-p545 :091 > a = [nil, 3, nil, nil].map.with_index{|p,x| {x => p}}.map{|p| p.delete_if{|k,v| v.nil?}}.reject(&:empty?).inject{}
=> {1=>3}
1.9.3-p545 :092 >