给定数组
array = ['a','b','c','d','e','f']
和哈希
hash = {"a"=>1,"b"=>2,"c"=>3,"d"=>4,"e"=>5,"f"=>6}
我想创建一个新数组,其中包含与第三个以后的每个索引的值相对应的对象。我目前正在这样做:
newArray = []
array[2..-1].each do |item|
newArray << hash[item]
end
我觉得这可以在一行中完成(可能事先没有创建newArray
,因为我想把它直接放到另一个对象的初始化代码中)。这可能吗?
答案 0 :(得分:3)
您想使用Hash#values_at
hash.values_at *array[2..-1]
# => [3, 4, 5, 6]
答案 1 :(得分:1)
怎么样?
array[2..-1].map{|x| hash[x]}
你能发布一些预期的示例输出吗?
答案 2 :(得分:0)
hash.keep_if {|k,v| array.slice(2, array.length-2).index(k) }.values
或
hash.dup.keep_if {|k,v| array.slice(2, array.length-2).index(k) }.values
如果您需要维护原始哈希值
答案 3 :(得分:0)
array[2..-1].inject([]) {|ary, x| ary << hash[x]}