2013-11-22 110 views
1

我以前有過類似的問題 - 我有n個元素的數組,我怎樣才能從中獲得兩個元素的所有組合,而不重複?數組中的兩個元素的組合

即,如果數組是這樣的:

var arr1 = new[] { "A", "B", "C", "D", "E"}; 

...結果應該是

AB 
AC 
AD 
AE 
BC 
BD 
BE 
CD 
CE 
CD 

你可以幫我實現這一目標?

+2

最後應該是'DE'不'CD' –

+2

爲什麼你寫的'CD'兩次? 「DE」在哪裏? –

+0

dup http://stackoverflow.com/questions/1272828/getting-all-the-combinations-in-an-array –

回答

0

嘗試以下(Cross在LINQ加入)

var arr1 = new[] { "A", "B", "C", "D", "E"}; 
    var result = (from i1 in arr1 
      from i2 in arr1.Where(i=> i[0]>i1[0]) 
      select i1+i2).ToArray(); 

片段導致在ideone here

AB 
AC 
AD 
AE 
BC 
BD 
BE 
CD 
CE 
DE 
+2

你應該過濾相同的el對,如「AA」 – Andrey

+0

太快,太不準確:) –

+0

並過濾掉BA等 –

1
var arr1 = new[] { "A", "B", "C", "D", "E" }; 
var combinations = new List<string>(); 
foreach (var i in arr1) { 
    foreach (var j in arr1) { 
     if((int)i.ToCharArray()[0] < (int)j.ToCharArray()[0]) { 
      combinations.Add(i + j); 
     } 
    } 
} 

現在組合列表包含所有的組合!

+0

我提高了它,但後來才明白它是不正確的。它將產生不需要的AB和BA。 – Andrey

+0

現在更正... – sjkm

+0

@sjkm:但它仍然是錯誤的結果(20而不是10)。 –

0

也許這個小LINQ查詢:

var allCombinations = from str1 in arr1 
         from str2 in arr1 
         where str1.CompareTo(str2) < 0 
         select str1 + str2; 
Console.Write(string.Join(",", allCombinations)); 

我最後是不同的,我認爲是你的結果一個錯字:AB,AC,AD,AE,BC,BD,BE,CD,CE,DE

+0

爲什麼不先運行它?它顯然產生了不同於問題中提出的結果的結果。 – Andrey

2

考慮下面的代碼...

var arr1 = new[] { "A", "B", "C", "D", "E" }; 
var combinations = new List<string>(); 
for(int i = 0; i < arr1.Length; i++) 
{ 
    for (int j = i + 1; j < arr1.Length; j++) 
    { 
     combinations.Add(string.Format("{0}{1}", arr1[i], arr1[j])); 
    } 
} 

祝你好運!

新增截圖以供參考......

enter image description here

+0

雖然我認爲@jim tollan的答案看起來更好,因爲他不需要一個額外的if語句,但這個也很糟糕。 :) – Abbas

1

好吧,我無力的嘗試:

var myArray = new[] { "A", "B", "C", "D", "E" }; 
var myCombos = new List<string>(); 
for (int i = 0; i < myArray.Length; i++) 
{ 
    for (int j = (i + 1); j < myArray.Length; j++) 
    { 
     myCombos.Add(myArray[i] + myArray[j]); 
    } 
} 

現在我們有:

AB AC AD AE BC BD B Ë CD CE DE

+0

似乎到目前爲止唯一正確的嘗試.. :) – Abbas

+1

是的,我當然不是天才 - 哈哈。不得不從回來的時候回想起那些老基本的幌子。不錯,你的腦子戲弄者 –

+0

不,你沒有得到讚揚。我可以在每個答案中看到向上/向下的投票,並且它只表示1up/0down => +1。 – Abbas

相關問題