数组中的返回值不是nil + index位置

时间:2014-05-13 09:13:04

标签: ruby-on-rails ruby ruby-on-rails-4

array = [nil, 3, nil, nil]

要返回非nil的值,请使用array.select {|a| a.present?}

我如何返回索引位置?例如,返回一个以位置为键的哈希表。

更新

预期产出:

{1=>3}

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 >