0

我对以下数组迭代有疑问。我想创建一个jt带有短语“food”和“drink”的数组,从第一个命令的输出可以看出,该命令由一个有两个标签的项目构成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"] 

谢谢帮助

4

1 回答 1

2
  1. 你得到两个嵌入式数组作为返回值.map,它不是jt。如果您只需要副作用,请使用.each
  2. 这在性能方面很糟糕,因为您必须遍历数组两次。

m.global_tags.map { |t| t.tag.phrase }返回你想要的结果。

于 2013-05-22T20:05:57.247 回答