ruby在迭代数组时不理解这种行为

时间:2013-05-22 20:04:06

标签: ruby

我遇到以下数组迭代的问题。我想创建一个带有“food”和“drink”的数组jt,这可以从第一个命令的输出中看出,该命令是从每个标签有两个global_tags的项构造的有一个短语,在这种情况下,是fooddrink。我不知道为什么我会在最后一行看到两个嵌入式数组。

1.9.3p392 :043 > m.global_tags.map { |t| puts t.tag.phrase }
drink
food
 => [nil, nil] 
1.9.3p392 :044 > jt=[]
 => [] 
1.9.3p392 :045 > m.global_tags.map { |t| jt << t.tag.phrase }
 => [["drink", "food"], ["drink", "food"]] 
1.9.3p392 :046 >

另外,我正在尝试缩短语法。这似乎有效但不确定这在Ruby术语中是否被认为是丑陋的(?)

1.9.3p392 :050 > m.global_tags.map(&:tag).map(&:phrase)
 => ["drink", "food"] 

寻求帮助

1 个答案:

答案 0 :(得分:2)

  1. 你得到两个嵌入式数组作为.map的返回值,它不是jt。如果您只需要副作用,请使用.each
  2. 这在性能上是不好的,因为你必须遍历数组两次。
  3. m.global_tags.map { |t| t.tag.phrase }会返回您想要的结果。