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


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 > 

最新更新