Ruby – 集合操作
该集合是一个无重复项的无序集合。与其他语言一样,Ruby 也提供了一个表示集合的数学概念的集合类。在这里,我们将讨论基本的集合运算,即并集、交集和差集。
联盟
在 Ruby 中,联合将数组、向量、哈希等两个对象作为参数,并产生第三个对象,该对象包含两个对象中的所有元素并删除重复元素。您可以使用管道运算符(|) 在两个数组之间执行联合。
Syntax:
x | y
Parameters: x and y are the sequence items of objects.
例如:
[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()函数来执行交集。
Syntax:
x & y
Parameters: x and y are the sequence items of objects.
例如:
[ '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()函数来执行差异。
Syntax:
x – y
Parameters: x and y are the sequence items of objects.
例如:
[ 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]