将方法应用于数组并将数组值作为键返回

时间:2018-06-14 07:44:13

标签: ruby

我想知道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,
}

2 个答案:

答案 0 :(得分:4)

您可以使用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}

答案 1 :(得分:1)

你可以选择这样的东西。虽然与您已有的答案相比,它缺乏可读性

public Stream<CompletableFuture<String>> findPricesStream(String product) {
    return shops.stream().map(shop -> CompletableFuture
        .supplyAsync(() -> Discount.applyDiscount(Quote.parse(shop.getPrice(product))), executor));
}