我有一個項目數組,並且我想要做的是某種循環,我將使用該數組中的每個對象並運行測試函數對於該數組中的每個其他剩餘對象。C#與同一陣列中的每個其他項目的數組中的每個項目
我不想兩次使用兩個相同的對象,這意味着如果A和B得到檢查B並且A不會被檢查。
可以說我有ABCD 數組現在我想做的是
AB
AC
AD
BC
BD
CD
這樣就不會有兩個相同的元素打印出兩次。
我有一個項目數組,並且我想要做的是某種循環,我將使用該數組中的每個對象並運行測試函數對於該數組中的每個其他剩餘對象。C#與同一陣列中的每個其他項目的數組中的每個項目
我不想兩次使用兩個相同的對象,這意味着如果A和B得到檢查B並且A不會被檢查。
可以說我有ABCD 數組現在我想做的是
AB
AC
AD
BC
BD
CD
這樣就不會有兩個相同的元素打印出兩次。
這是一個簡單的嵌套循環:
int[] myArray = new int[1000];
for (int x = 0; x < myArray.Length; ++x)
{
for (int y = x+1; y < myArray.Length; ++y)
{
// do something with x and y
}
}
你應該明白,對於大數組這可能需要很長的時間。組合的數量是n*(n-1)/2
。所以如果你的數組包含1,000個項目,你將有幾乎500,000個組合來檢查。
不,這將使用x和y兩次,因爲X將被使用一次,然後第二次當對象是Y時變爲X .. – user3025332
@ user3025332:你是什麼意思?有3個項目,這會給'0,1','0,2'和'1,2'。它不會重複組合(例如,它不會給出'1,0')。 –
這個循環是正確的。請親自嘗試一下,並密切注意'y'是如何初始化的。 –
你能展示一些**代碼**嗎? –
你的問題似乎令人困惑,但請嘗試使用LINQ的'Distinct()'方法。 –
聽起來像一個標準的組合問題。你有沒有試過尋找生成所有組合?有大量的StackOverflow帖子顯示如何做到這一點。 – BradleyDotNET