array1=[1,2,1,1,5]
我如何可以搜索任何重複,並把它們放到另一個數組,例如數組2,但前提是有超過3種?
我的目標是
array2=[1,1,1]
array1=[1,2,1,1,5]
我如何可以搜索任何重複,並把它們放到另一個數組,例如數組2,但前提是有超過3種?
我的目標是
array2=[1,1,1]
使用選擇你可以在你的array1
該元素存在3次或更多次,我在你的預期輸出中看到:
array1 = [1,2,1,1,5]
array2 = array1.select { |e| array1.count(e) >= 3 }
p array2
# [1, 1, 1]
如果存在沒有重複3次或更多次的元素,則array2將爲空。
我會做這樣的事情:
array1.group_by(&:itself).select { |_, v| v.size >= 3 }.values.flatten
#=> [1,1,1]
這保留訂單和具有O(n)的時間複雜度,n
作爲數組的大小。
array1 = [3,2,1,3,2,1,1,5,2,1,3,3]
array1 - array1.each_with_object(Hash.new(0)) { |n,h| h[n] += 1 }.
select { |_,cnt| cnt <= 3 }.keys
#=> [3, 1, 3, 1, 1, 1, 3, 3]
步驟如下。
g = array1.each_with_object(Hash.new(0)) { |n,h| h[n]+= 1 }
#=> {3=>4, 2=>3, 1=>4, 5=>1}
h = g.select { |_,cnt| cnt <= 3 }
#=> {2=>3, 5=>1}
a = h.keys
#=> [2, 5]
array1 - a
#=> [3, 1, 3, 1, 1, 1, 3, 3]
Hash::new有默認值(這裏是零),通常被稱爲計數哈希。如果h = Hash.new(0)
和h
沒有密鑰k
,則h[k]
返回默認值0
。
當紅寶石遇到表達h[k] += 1
她做的第一件事就是它擴大到
h[k] = h[k] + 1
如果h
沒有密鑰k
這成爲
h[k] = 0 + 1
免收snytactic糖,前者表達讀
h.[]=(k, h.[](k) + 1)
我建議先閱讀關於[Enumerable](https://ruby-doc.org/core-2.4.1/Enumerable.html)和[Array](https://ruby-doc.org/core)的文檔-2.4.1/Array.html)。他們擁有您需要的一切。 –
你需要在這裏更具體。訂單是否需要保存?你是否也需要將它們從原始數組中刪除? – tadman
沒有訂單或刪除只有重複存儲在另一個數組中的重複如果有3個以上重複 –