我试过 uniq 函数在 Ruby 中不起作用

I tried uniq function doesn’t work in Ruby

我有:

我想显示所有文章的唯一标签列表。

我尝试使用 .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(' ')