Ruby on rails 是否有可能从两个动态数组中获得差异,而不考虑它们的顺序?
如果我有两个数组,我试着找出它们的差异Ruby on rails 是否有可能从两个动态数组中获得差异,而不考虑它们的顺序?,ruby-on-rails,ruby,arrays,Ruby On Rails,Ruby,Arrays,如果我有两个数组,我试着找出它们的差异 [1, 2, 3, 2, 6, 7] - [2, 1] 我得到: [3, 6, 7] [] 但是如果我把这些数组翻转过来 [2, 1] - [1, 2, 3, 2, 6, 7] 我得到: [3, 6, 7] [] 我的问题是,由于我的两个数组是动态的,所以我需要知道两个数组之间是否存在差异,而不管它们的顺序如何。最简单的表达式是什么?使用: 根据文件: Set#^返回一个新的集合,其中包含集合和 给定的可枚举对象 您可以定义它: class A
[1, 2, 3, 2, 6, 7] - [2, 1]
我得到:
[3, 6, 7]
[]
但是如果我把这些数组翻转过来
[2, 1] - [1, 2, 3, 2, 6, 7]
我得到:
[3, 6, 7]
[]
我的问题是,由于我的两个数组是动态的,所以我需要知道两个数组之间是否存在差异,而不管它们的顺序如何。最简单的表达式是什么?使用:
根据文件:
Set#^
返回一个新的集合,其中包含集合和
给定的可枚举对象
您可以定义它:
class Array
def diff(o)
(o - self) + (self - o) # alternatively: (o + self) - (o & self)
end
end
[2, 1].diff [1, 2, 3, 2, 6, 7] # [3, 6, 7]
[1, 2, 3, 2, 6, 7].diff [2, 1] # [3, 6, 7]
[2, 3, 3, 1].diff [2, 4, 5] # [4, 5, 3, 3, 1]
[2, 4, 5].diff [2, 3, 3, 1] # [3, 3, 1, 4, 5]
正确的答案可能取决于你最终想要什么,正如上面的后两个例子所示
如果您只需要唯一的值,则需要首先将两个输入转换为集合,并将结果作为数组返回:
class Array
def diff(o)
(o.to_set ^ to_set).to_a # or simply (o.to_set ^ self).to_a
end
end
[2, 4, 5].diff [2, 3, 3, 1] # [4, 5, 3, 1]
(可能也有一个内置的Rails方法。)需要
要求“设置”
Rails外部:set.new([1,2,3,2,6,7])-set.new([2,1])
:-)@Denis,谢谢你的评论。我现在的答案是用三元数来计算较大的数,然后减去较大的数。比较两个数组的长度来确定哪个数组去哪里对我来说似乎很简单。如果数组是[1,2,3]
&[3,4,5]
(因为在您的示例中没有说明这种情况),结果应该是什么谢谢,丹尼斯。这是经过深思熟虑的。MxyL的也是。你们两个,谢谢self.to_set
可以替换为self
,因为set^
接受一个可枚举对象。+1,因为这(o-self)+(self-o)
至少对我来说是非常有表现力的:)