我们有一个哈希和一个数组:
hsh = {name: "", age: "", height: "", weight: ""}
arr = ["joe", "19", "179", "70"]
我们想要:
hsh = {name: "joe", age: "19", height: "179", weight: "70"}
我的解决方案工作正常:
hsh.keys.each_with_index {|k,i| hsh[k] = arr[i]}
有更好的方法吗?
答案 0 :(得分:2)
略短:
hsh.keys.zip(arr){|k, v| hsh[k] = v}
答案 1 :(得分:1)
假设您正在使用Ruby v1.9 +(哈希键在早期版本中没有排序)并且您知道arr
中值的顺序与哈希中键的(插入)顺序相对应,那么你可以写:
(第一种方式被删除,因为不如@ sawa的回答)
如果arr
可以变异(修改),你可以这样做:
hsh.each_key { |k| hsh[k] = arr.shift }
#=> {:name=>"joe", :age=>"23", :height=>"179", :weight=>"70"}
或者你可以写:
e = arr.to_enum
hsh.each_key { |k| hsh[k] = e.next }
#=> {:name=>"joe", :age=>"23", :height=>"179", :weight=>"70"}
不会改变arr
。还有很多其他方法。
答案 2 :(得分:1)
略短一点
hsh.keys.zip(arr).to_h
# => {:name=>"joe", :age=>"19", :height=>"179", :weight=>"70"}
如果不支持to_h
,
Hash[hsh.keys.zip(arr)]
# => {:name=>"joe", :age=>"19", :height=>"179", :weight=>"70"}
答案 3 :(得分:1)
我使用Enumerable#each_with_index
:
arr = ["joe", "19", "179", "70"]
hash = {name: "", age: "", height: "", weight: ""}
hash.each_with_index { |(k, _), ind| hash[k] = arr[ind] }
hash # => {:name=>"joe", :age=>"19", :height=>"179", :weight=>"70"}