我有一个包含重复元素的Ruby数组。从Ruby中的数组中删除重复的元素
array = [1,2,2,1,4,4,5,6,7,8,5,6]
如何从该数组中删除所有重复元素,同时保留所有独特元素而不使用for-loops和迭代?
我有一个包含重复元素的Ruby数组。从Ruby中的数组中删除重复的元素
array = [1,2,2,1,4,4,5,6,7,8,5,6]
如何从该数组中删除所有重复元素,同时保留所有独特元素而不使用for-loops和迭代?
uniq method删除所有重复元素并保留数组中的所有唯一元素。
Ruby语言的许多美女之一。
您可以删除与uniq的方法重复的元素:
array.uniq # => [1, 2, 4, 5, 6, 7, 8]
什么可能还需要了解的是,uniq的方法需要一个块,因此例如,如果你有这样的按键阵列:
["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]
,你想知道什么是独特的文件,你可以用它找出来:
a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }
如果有人正在寻找一种方法来删除重复值的所有实例,请参阅this question。
a = [1, 2, 2, 3]
counts = Hash.new(0)
a.each { |v| counts[v] += 1 }
p counts.select { |v, count| count == 1 }.keys # [1, 3]
或者可以简单地做 'a = [1,2,3] a.find_all {| x | a.count(x)== 1}#[1,3]' –
您也可以返回交集。
a = [1,1,2,3]
a & a
这也将删除重复项。
从功能上来说,这个答案是正确的,但我认为这比仅使用uniq的可读性明显降低。 –
我只是把它放在这里,所以无论谁访问这个页面,都会看到其他的方法,我并不是想说它以任何方式更好。 – jaredsmith
这个原因起作用是因为当使用set操作时,结果数组被视为一个集合,这是一个通常没有重复值的数据结构。使用'a |一个'(联合)会做同样的伎俩。 – Cezar
如果有人在意,只是另一种选择。
您也可以使用将数组转换为集合的数组的方法to_set
,并且根据定义,集合元素是唯一的。
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
这是一个非常普遍的一类问题,有许多变化。但前提保持不变。输入数组由整数组成,其中一些可能是重复的。我们应该打印该阵列中存在的所有唯一编号。
与XOR操作员尝试在Ruby中:
a = [3,2,3,2,3,5,6,7].sort!
result = a.reject.with_index do |ele,index|
res = (a[index+1]^ele)
res == 0
end
print result
或在这种情况下,只是''array.uniq代替其工作! – cvshepherd
不,uniq!如果数组已经是唯一的,方法将返回nil 例如:a = [1,2,3,4] a.uniq - > [1,2,3,4] 但是 a.uniq! - >无 – duykhoa
我真的不认为这是一个红宝石语言的美丽......它只是红宝石标准库的美丽? 不要误解我的意思,关于这门语言有很多美丽的东西。 –