我有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个数组。我正在寻找所有相同的数组并列出每个重复的数组。
答案 0 :(得分:6)
首先,这里更大的问题是你正在处理39208个变量。几乎可以肯定,有一种更好的方法来处理数据,而无需处理那么多变量。我不知道你是如何将这些数据放入你的代码中的,但是你应该首先将所有这些变量放在一个数组中,这样你就不必处理这么多变量,例如< / p>
select * from hightransaction
之后,您可以使用Array#combination来迭代ResponseObject result = new ResponseObject();
result = (InnerClasses.ResponseObject)JSON.deserialize(json, InnerClasses.ResponseObject.class);
中的所有对:
all_arrays = [a1, a2, a3, ... a39208]
all_arrays
会在all_arrays.combination(2).map do |arr1, arr2|
(arr1 - arr2).empty?
end
中为您提供所有元素。
再看一遍,应该指出你可能还想反过来比较这些元素。对于某些数组,all_arrays.combination(2)
可能为真,但all_arrays
可能为false。 e.g。
(a1 - a2).empty?
如果这对您的用例很重要,请改用Array#permutation:
(a2 - a1).empty?