我试过 uniq 函数在 Ruby 中不起作用
I tried uniq function doesn’t work in Ruby
我有:
- 带有标签的文章 A:
tags: [chris, mark, scott]
- 带有标签的文章 B:
tags: [mark, scott, chris]
我想显示所有文章的唯一标签列表。
我尝试使用 .uniq
功能,但它不起作用。
这是我的代码:
vars[:tags] = articles.map {|x| x[:tags]}.uniq.join(' ')
这导致:chris, mark, scott mark, scott, chris
期望的结果应该是:chris, mark, scott
有什么帮助吗?谢谢!
您只为每篇文章加入了 uniq 标签,但如果我知道您想为每篇文章集合加入 uniq,那么您应该这样做:
vars[:tags] = []
articles.each { |article| vars[:tags] += article[:tags] }
vars[:tags] = vars[:tags].uniq.join(' ')
这是了解您应该实现的目标的基本思路:首先获取所有标签,然后获取 onlu uniq 标签。你可以用很多其他方式来写它,但想法是一样的。
地图后面有一个嵌套数组。使用Array#flatten
将其递归减少一级:
articles.map {|x| x[:tags]} #=> [["chris", "mark", "scott"], ["mark", "scott", "chris"]]
articles.map {|x| x[:tags]}.flatten #=> ["chris", "mark", "scott", "mark", "scott", "chris"]
这就是你想要的:
vars[:tags] = articles.map {|x| x[:tags]}.flatten.uniq.join(' ')
感谢@Stefan, you can also use Enumerable#flat_map
for the same result as a.map {}.flatten
, which may even be faster:
vars[:tags] = articles.flat_map {|x| x[:tags]}.uniq.join(' ')
我有:
- 带有标签的文章 A:
tags: [chris, mark, scott]
- 带有标签的文章 B:
tags: [mark, scott, chris]
我想显示所有文章的唯一标签列表。
我尝试使用 .uniq
功能,但它不起作用。
这是我的代码:
vars[:tags] = articles.map {|x| x[:tags]}.uniq.join(' ')
这导致:chris, mark, scott mark, scott, chris
期望的结果应该是:chris, mark, scott
有什么帮助吗?谢谢!
您只为每篇文章加入了 uniq 标签,但如果我知道您想为每篇文章集合加入 uniq,那么您应该这样做:
vars[:tags] = []
articles.each { |article| vars[:tags] += article[:tags] }
vars[:tags] = vars[:tags].uniq.join(' ')
这是了解您应该实现的目标的基本思路:首先获取所有标签,然后获取 onlu uniq 标签。你可以用很多其他方式来写它,但想法是一样的。
地图后面有一个嵌套数组。使用Array#flatten
将其递归减少一级:
articles.map {|x| x[:tags]} #=> [["chris", "mark", "scott"], ["mark", "scott", "chris"]]
articles.map {|x| x[:tags]}.flatten #=> ["chris", "mark", "scott", "mark", "scott", "chris"]
这就是你想要的:
vars[:tags] = articles.map {|x| x[:tags]}.flatten.uniq.join(' ')
感谢@Stefan, you can also use Enumerable#flat_map
for the same result as a.map {}.flatten
, which may even be faster:
vars[:tags] = articles.flat_map {|x| x[:tags]}.uniq.join(' ')