我想知道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,
}
答案 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));
}