2014-12-27 50 views
0

有沒有一種方法可以確定當您在Ruby中執行2個集合的獨佔或操作時元素來自哪個集合。Ruby集合的異或 - 確定每個元素來自哪個集合

require 'set' 

set_a = [1,2,3].to_set 
set_b = [2,3,4].to_set 

set_a^set_b # => returns a new set containing elements [4,1] 

但我需要的是這樣的

require 'set' 

set_a = [1,2,3].to_set 
set_b = [2,3,4].to_set 

set_a^set_b # => should return something like [set_b(4), set_a(1)] 
+0

爲什麼不直接使用'set_b.include?(4)'? – Koraktor

+1

沒有像Ruby這樣內置的東西。你將不得不寫一點簡單的代碼來做到這一點。 – meagar

+0

我提供了一個適用於任意數量集合的答案。返回類型可以修改。在我的回答中,它是一個包含元素鍵和設置值的散列。 – Humza

回答

0

我不這麼認爲。但是你可以用元素鍵和值來返回一個散列。

def pick_a_name(*sets) 
    sets.reduce(:^).each_with_object({}) do |element, hash| 
    hash[element] = sets.find{ |set| set.include?(element) } 
    end 
end 
0

爲什麼不是這麼簡單?

require 'set' 

set_a = [1,2,3].to_set 
set_b = [2,3,4].to_set 

in_a = set_a - set_b # #<Set: {1}> 
in_b = set_b - set_a # #<Set: {4}> 

# make any structure you like from in_a and in_b 

(這並不直接回答這個問題,因爲EXLUSIVE或/ ^帽子不使用,但我希望它仍然是好)

+0

我正在尋找一種解決方案,可以適用於任意數量的套件(5套,10套,100000套)。我可能應該指出這一點,但我認爲會有一種「紅寶石般的方式」,默認情況下,它將佔x組數。 – user2840647

+0

你的意思是像'set_a^set_b^set_c^set_d^...'? – Markus

+0

是的,正好:) – user2840647

相關問題