array = [nil, 3, nil, nil]
要返回非nil
的值,请使用array.select {|a| a.present?}
我如何返回索引位置?例如,返回一个以位置为键的哈希表。
更新
预期产出:
{1=>3}
答案 0 :(得分:2)
您可以使用Array#compact以更优雅的方式摆脱nils:
arr = [nil, 3, nil, nil]
arr.compact # => [3]
然后你可以使用Array#each_index做你想做的事。例如:
Hash[arr.each_index.zip(arr)]
答案 1 :(得分:2)
我会先将数组转换为position => element
哈希(参见Convert an array to hash, where keys are the indices):
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}
答案 2 :(得分:0)
试试这个
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 >