2017-04-12 78 views
0

我有39208個數組。標有a1, a2, a3, a4,... a39208。 我想能夠比較每個陣列對所有其他陣列。將多個數組與多個數組進行比較(在ruby或python中)

(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 

NOT ACTUAL CODE:只是想傳達一個想法。其中m應更改爲a2, a3, a4, a5隨着循環的進行。我知道它會在最後附加一個#,並且我會以a11, a12, a13

結束,所以不必寫直到時間結束。我如何知道代碼(a1-a2).empty?更改爲-a3, -a4, -a5,... -a390208。 =>(a1-a39028).empty?

我想要做的是輸入另一個數組到代碼改變哪個陣列面對對方。

也許還有其他方法可以解決這個問題。我可以將數組更改爲列表或字符串。

編輯: 每個數組包含30個數字,有39208個數組。我正在尋找所有相同的數組,並列出每個重複的數組。

+1

是什麼'(A1-A2).empty'是什麼意思? – martineau

+0

數組中有什麼?數字,字符串等? – thesonyman101

+0

是'a1','a2'的變量名稱? –

回答

6

因此,首先,更大的問題是您正在處理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| ...