我有 39208 个数组。标记为a1, a2, a3, a4,... a39208
.我希望能够将每个数组与所有其他数组进行比较。
(a1-a2).empty?; (a1-a3).empty?; (a2-a3).empty?;... (a4-a39208).empty?
我不确定如何在代码中对数组名称更改进行编码。例如,如果我有一个循环:
b = 0
loop do
b +=1
m = ["a1" + b.to_s]
w = m
k = (m - a1).empty?
puts k
if b == 39208
break
end
end
不是实际代码:只是试图传达一个想法。m
应该更改为a2, a3, a4, a5
随着循环的进行。我知道它只会在末尾附加一个 #,我最终会得到a11, a12, a13
所以不必写(a1-a2).empty?; (a1-a3).empty?; (a2-a3).empty?;... (a4-a39208).empty?
直到时间的尽头。我怎么能让代码(a1-a2).empty?
变成-a3, -a4, -a5,... -a390208
.=> (a1-a39028).empty?
我正在尝试做的是在代码中输入另一个数组,更改哪个数组与另一个数组对峙。
也许还有其他方法可以解决这个问题。我可以将数组更改为列表或字符串。
编辑:每个数组包含 30 个数字,有 39208 个数组。我正在寻找所有相同的数组并列出每个重复的数组。
首先,这里更大的问题是你正在处理 39208 个变量。几乎可以肯定,有一种更好的方法来处理数据,而无需处理那么多变量。我不知道您如何将这些数据放入代码中,但您应该首先将所有这些变量放入一个数组中,这样您就不必处理这么多变量,例如
all_arrays = [a1, a2, a3, ... a39208]
之后,您可以使用 Array#combination 遍历all_arrays
中的所有对:
all_arrays.combination(2).map do |arr1, arr2|
(arr1 - arr2).empty?
end
all_arrays.combination(2)
将为您提供all_arrays
中的所有元素对。
再看一遍,应该指出的是,您可能还想反向比较这些元素。对于某些数组,(a1 - a2).empty?
可能是真的,但(a2 - a1).empty?
可能是假的。例如
a1 = [1,2,3]
a2 = [1,2,3,4]
(a1 - a2).empty?
# => ([1,2,3] - [1,2,3,4]).empty?
# => ([]).empty?
# => true
(a2 - a1).empty?
# => ([1,2,3,4] - [1,2,3]).empty?
# => ([4]).empty?
# => false
如果这对您的用例很重要,只需改用 Array#permutation
:all_arrays.permutation(2).map do |arr1, arr2| ...