Mit*_*ran 307 ruby arrays ruby-on-rails duplicates
我有一个包含重复元素的Ruby数组.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Run Code Online (Sandbox Code Playgroud)
如何在不使用for循环和迭代的情况下保留所有唯一元素的同时从此数组中删除所有重复元素?
Mit*_*ran 690
array = array.uniq
Run Code Online (Sandbox Code Playgroud)
的uniq的方法删除所有重复的元素并保留在阵列中的所有唯一元素.
Ruby语言的众多美女之一.
jar*_*ith 80
你也可以返回十字路口.
a = [1,1,2,3]
a & a
Run Code Online (Sandbox Code Playgroud)
这也将删除重复项.
Mar*_*oda 42
您可以使用uniq方法删除重复的元素:
array.uniq # => [1, 2, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)
可能还有用的是uniq方法需要一个块,所以例如,如果你有一个像这样的键数组:
["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]
Run Code Online (Sandbox Code Playgroud)
而你想知道什么是独特的文件,你可以找到它:
a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }
Run Code Online (Sandbox Code Playgroud)
Lri*_*Lri 17
如果有人正在寻找删除重复值的所有实例的方法,请参阅此问题.
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]
Run Code Online (Sandbox Code Playgroud)
Fin*_*nks 17
如果有人关心,只是另一种选择.
您还可以使用to_set将Array转换为Set的数组方法,根据定义,set元素是唯一的.
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
对我来说最简单的方法是这些:
array = [1, 2, 2, 3]
Run Code Online (Sandbox Code Playgroud)
Array#to_setarray.to_set.to_a
# [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)
Array#uniqarray.uniq
# [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)