首页 > 解决方案 > 将方法应用于数组并将数组值作为键返回

问题描述

我想知道 ruby​​ 是否有内置方法来执行以下操作。

从这个数组:

array = [:foo, :bar]

这个方法:

def content_for_key key
  return :baz if key == :foo
  return :qux if key == :bar
end

这个电话:

array.some_built_in_ruby_method(&:content_for_key)

我们得到:

{
  :foo => :baz,
  :bar => :qux,
}

标签: ruby

解决方案


您可以使用map将每个元素转换为一[key, value]对:

array.map { |key| [key, content_for_key(key)] }
#=> [[:foo, :baz], [:bar, :qux]]

然后to_h将嵌套数组转换为哈希:

array.map { |key| [key, content_for_key(key)] }.to_h
#=> {:foo=>:baz, :bar=>:qux}

或者您可以each_with_object在遍历数组时使用它来填充散列:

array.each_with_object({}) { |key, hash| hash[key] = content_for_key(key) }
#=> {:foo=>:baz, :bar=>:qux}

推荐阅读