Ruby集的独占OR - 确定每个元素来自哪个集合

时间:2014-12-27 23:15:17

标签: ruby

在Ruby中对2个集执行独占或操作时,有没有办法确定元素来自哪个集合。

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)]

2 个答案:

答案 0 :(得分:0)

我不这么认为。但是你可以返回一个带元素键和设置值的哈希值。

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

答案 1 :(得分: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或/ ^帽子,但我希望它仍然是okey)