gpt4 book ai didi

ruby - 比较二维数组

转载 作者:数据小太阳 更新时间:2023-10-29 08:03:54 25 4
gpt4 key购买 nike

我有四个不同长度的二维数组。有没有办法比较它们以确保没有数组共享值?是否有一种简单的编码方法或我可以使用的 gem?

用一个例子来支持我的问题:

array1 = [[2,3],[2,4]]

array2 = [[1,3],[2,3],[3,3]]

array3 = [[5,3],[6,3],[7,3],[8,3],[9,3]]

我想要一个检查器,让我知道 array1array2 有一个相同的元素。

这可行吗?

最佳答案

您可以按如下方式进行。

代码

def shared_values?(*arr)
a = arr.map(&:uniq).reduce(:+)
a.size > a.uniq.size
end

示例

array1 = [[2, 3], [2, 4]]
array2 = [[1, 3], [2, 3], [3, 3]]
array3 = [[5, 3], [6, 3], [7, 3],[8, 3],[9, 3]]
shared_values? array1, array2, array3 #=> true

array1 = [[2, 4]]
shared_values? array1, array2, array3 #=> false

array1 = [[2, 4], [2, 4]]
shared_values? array1, array2, array3 #=> false

array1 = [[2, 3], [2, 4], [2, 4]]
shared_values? array1, array2, array3 #=> false

解释

对于上面的最后一个例子:

arr = [array1, array2, array3]
#=> [ [[2, 3], [2, 4], [2, 4]],
# [[1, 3], [2, 3], [3, 3]],
# [[5, 3], [6, 3], [7, 3], [8, 3], [9, 3]] ]

a = arr.map(&:uniq)
#=> [ [[2, 3], [2 ,4]],
# [[1, 3], [2, 3], [3, 3]],
# [[5, 3], [6, 3], [7, 3], [8, 3], [9, 3]] ]
b = a.reduce(:+)
#=> [[2, 3], [2, 4], [1, 3], [2, 3], [3, 3],
# [5, 3], [6, 3], [7, 3], [8, 3], [9, 3]]
c = b.uniq
#=> [[2, 3], [2, 4], [1, 3], [3, 3],
# [5, 3], [6, 3], [7, 3], [8, 3], [9, 3]]
b.size > c.size
# 10 > 9 #=> true

arr.map(&:uniq) 等同于:

arr.map { |a| a.uniq }

a.reduce(:+) 使用 Enumerable#reduce 的形式它采用一个符号作为参数,命名一个方法应用于 arr 的每个元素,结果是包含 b 元素的三个数组的总和.

关于ruby - 比较二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com