新手问题 Array 迭代给 Hash 赋值的问题

yeyong14 · 2015年01月12日 · 最后由 bluexuemei 回复于 2015年01月13日 · 2552 次阅读
array = [1,2,3,4]
data = [{number: 1, index: 0}, {number: 2, index: 1}, {number: 3, index: 2}, {number: 4, index: 3}]

我现在是这样做的

2.0.0-p481 :040 > data = {}
 => {}
2.0.0-p481 :041 > su = []
 => []
2.0.0-p481 :042 > array.each do |arr|
2.0.0-p481 :043 >     data["number"] = arr
2.0.0-p481 :044?>   data["index"] = arr + 1
2.0.0-p481 :045?>   su << data
2.0.0-p481 :046?>   end
 => [1, 2, 3, 4]
2.0.0-p481 :047 > su
 => [{"number"=>4, "index"=>5}, {"number"=>4, "index"=>5}, {"number"=>4, "index"=>5}, {"number"=>4, "index"=>5}]
2.0.0-p481 :048 >

出来的都是一样的

data={} data["number"] = arr

看对不

因为你的 su 里面实际只是同一个 data 的引用 而已。 而且你实际需要的方法也应该是 map

@chenge @serco 谢谢你们 解决了

#先转成这样,可能其他有更好办法
array = [[0,1], [1,2], [2,3], [3,4]]
2.0.0-p481 :026 > new_hash = array.map!{|i| Hash[data.keys.zip(i)]}
 => [{:number=>0, :index=>1}, {:number=>1, :index=>2}, {:number=>2, :index=>3}, {:number=>3, :index=>4}]

不知道你的真实需求,按照你原帖的代码,你为什么不写成这样?

[1,2,3,4].map {|num| {number: num-1, index: num}}
[1,2,3,4].each_with_index.map { |n, i| {number: n, index: i} }

@saiga @serco 谢谢,确实是你们所说的这样。非常感谢你们的帮助

@chenge 是你吗,你最近在哪里吗

#7 楼 @yeyong14 是的,你好。这里不方便说,邮件联系吧。

#5 楼 @saiga ,你整复杂了

[1,2,3,4].map.with_index{ |n, i| {number: n, index: i} }
需要 登录 后方可回复, 如果你还没有账号请 注册新账号