我有一個包含重複元素的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
我真的不認爲這是一個紅寶石語言的美麗......它只是紅寶石標準庫的美麗? 不要誤解我的意思,關於這門語言有很多美麗的東西。 –