将数组索引转换为一行中哈希中的对象

时间:2016-04-11 22:10:48

标签: arrays ruby list dictionary hash

给定数组

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,因为我想把它直接放到另一个对象的初始化代码中)。这可能吗?

4 个答案:

答案 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]}