私はハッシュを持っています。
hash1 ={1=>"a",2=>"b",3=>"c",4=>"d"}
そして配列、言う:
arr=[2,3]
そして、次のような結果のハッシュを見つける必要があります。
hash2={2="b",3=>"c"}
つまり、結果のハッシュには、指定された配列にキーが存在するキーと値のペアのみが含まれている必要があります。ループなしでこれを行うことは可能ですか?
私はハッシュを持っています。
hash1 ={1=>"a",2=>"b",3=>"c",4=>"d"}
そして配列、言う:
arr=[2,3]
そして、次のような結果のハッシュを見つける必要があります。
hash2={2="b",3=>"c"}
つまり、結果のハッシュには、指定された配列にキーが存在するキーと値のペアのみが含まれている必要があります。ループなしでこれを行うことは可能ですか?
hash1.select {|k,v| arr.member? k} # {2=>"b", 3=>"c"}
これまでのすべての回答のベンチマーク:
require 'fruity'
hash1 = Hash[[*1..10000].zip[*1.10000]]
arr = 1.upto(1000).select(&:odd?)
compare do
keep_if_include do
hash2 = hash1.dup.keep_if {|k,v| arr.include? k}
end
values_at_zip do
hash2 = Hash[arr.zip(hash1.dup.values_at(*arr))]
end
select_member do
hash2 = hash1.dup.select {|k,v| arr.member? k}
end
end
結果:
Running each test 4096 times. Test will take about 17 seconds.
select_member is faster than keep_if_include by 2x ± 0.1
keep_if_include is faster than values_at_zip by 410x ± 100.0