📜  Ruby – 集合操作

📅  最后修改于: 2022-05-13 01:55:31.910000             🧑  作者: Mango

Ruby – 集合操作

该集合是一个无重复项的无序集合。与其他语言一样,Ruby 也提供了一个表示集合的数学概念的集合类。在这里,我们将讨论基本的集合运算,即并集、交集和差集。

联盟

在 Ruby 中,联合将数组、向量、哈希等两个对象作为参数,并产生第三个对象,该对象包含两个对象中的所有元素并删除重复元素。您可以使用管道运算符(|) 在两个数组之间执行联合。

例如:

[1, 2, 1, 2, 3, 5, 7] | [1, 2, 3, 4] #=> [1, 2, 3, 4, 5, 7]


示例 1:

# Ruby program to illustrate the union
  
# Array
arr_1 = [ 2, 4, 5, 6, 7, 9, 1, 2, 4 ] 
arr_2 = [ 2, 4, 5, 6, 9, 8, 0, 3, 3 ] 
  
# Union 
 result = arr_1 | arr_2
   
 # Display result
 puts "#{result}"

输出:

[2, 4, 5, 6, 7, 9, 1, 8, 0, 3]

示例 2:

# Ruby program to illustrate Union of arrays
   
class MultiSet
  attr_accessor :set
  def initialize(set)
    @set = set
  end
  
# Union
  def |(other)
    @set | other.set
  end
end
   
x = MultiSet.new([ 1, 1, 2, 2, 3, 4, 5, 6, 7, 8 ])
y = MultiSet.new([ 1, 3, 5, 6, 8 ])
   
p x | y 

输出:

[1, 2, 3, 4, 5, 6, 7, 8]

路口

在 Ruby 中,交集将两个对象(如数组、向量、哈希等)作为参数,并产生第三个对象,该对象包含两个对象中共有的元素并删除重复项。相交中的顺序从原始数组中保留。您可以使用 &运算符或使用 intersection()函数来执行交集。

例如:

[ 'a', 'b', 'b', 'z' ] & [ 'a', 'b', 'c' ,'z']   #=> [ 'a', 'b' ,'z']


示例 1:

# Ruby program to illustrate the intersection method 
  
# requires the set 
require "set"
  
x = Set.new([ 1, 2, 3, 4 ])
y = Set.new([ 1, 2, 4 ])
  
# Intersection method used 
res = x.intersection(y) 
  
# Prints the res 
puts res

输出:

Set: {1, 2, 4}

示例 2:

# Ruby program to illustrate intersection of arrays
class MultiSet
  attr_accessor :set
  def initialize(set)
    @set = set
  end
  
# Intersection
  def &(other)
    @set & other.set
  end
      
x = MultiSet.new([ 1, 1, 2, 2, 3, 4, 5, 6, 7, 8 ])
y = MultiSet.new([ 1, 3, 5, 6, 8 ])
   
p x & y 
end

输出:

[1, 3, 5, 6, 8]

不同之处

在 Ruby 中,差异将数组、向量、哈希等两个对象作为参数,并返回两个对象的差异。您可以使用 –运算符或使用 difference()函数来执行差异。

例如:

[ 22, 45, 89, 76 ] - [ 22, 22, 89, 79 ]   #=> [45]


示例 1:

# Ruby program to illustrate the difference method 
  
# requires the set 
require "set"
  
x = Set.new([ 1, 2, 3, 4 ])
y = Set.new([ 1, 2, 4, 5 ])
  
# Difference method used 
res = x.difference(y) 
  
# Prints the res 
puts res

输出:

Set: {3}

示例 2:

# Ruby program to illustrate difference of arrays
class MultiSet
  attr_accessor :set
  def initialize(set)
    @set = set
  end
  
# Difference
  def -(other)
    @set - other.set
  end
  
x = MultiSet.new([ 1, 1, 2, 2, 3, 4, 5, 6, 7, 8 ])
y = MultiSet.new([ 1, 3, 5, 6, 8 ])
   
p x - y 
end

输出:

[2, 2, 4, 7]