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]]

  

posted @ 2020-08-27 11:00  鞋带松了  阅读(202)  评论(0编辑  收藏  举报