ruby语法之zip
keys = [:foo, :bar, :bat]
vals = [4, 5, 6]
# do something to get
{foo: 4, bar: 5, bat: 6}
h = Hash[keys.zip vals]
# 其中 keys.zip vals => [[:foo, 4], [:bar, 5], [:bat, 6]]
# 然后再用Hash::[]方法生成一个Hash
数组等长的情况下,这么做很完美,如果不等长呢?
keys = [:foo, :bar, :bat] vals = [4, 5, 6, 7] keys.zip vals # => [[:foo, 4], [:bar, 5], [:bat, 6]] vals = [4, 5] keys.zip vals # => [[:foo, 4], [:bar, 5], [:bat, nil]]
kvs = keys.zip vals [keys, vals].transpose == kvs # => keys和vals长度相同时为true,长度不同时transpose方法会报错 Hash[kvs] == kvs.to_h # => true
实例:
irb(main):001:0> a = [1,2,3,4]
=> [1, 2, 3, 4]
irb(main):002:0> b = ['a', 'b', 'c', 'd']
=> ["a", "b", "c", "d"]
irb(main):003:0> Hash[b.zip a]
=> {"a"=>1, "b"=>2, "c"=>3, "d"=>4}
irb(main):004:0> b.zip a
=> [["a", 1], ["b", 2], ["c", 3], ["d", 4]]

浙公网安备 33010602011771号