2013-07-16 41 views
2

我需要創建一個過程,使我能夠爲三個或更多組獲得三個重複值的唯一組合的全套組合。例如我可以有3組(R1 - R2 - R3)和3個值(A - AB - B),我必須將所有可能的組合分爲3組。組合3個更多值組的算法

像這樣:

Groups 1° 2° 3° 4° 5° ....... 

R1  A - A - AB - AB - AB ... 
R2  A - A - A - A - BB ... 
R3  A - AB - A - A - A ... 

我必須要確保所有可能的序列存在且從不重複。

不幸的是,我是編程領域的新手,我對combinatorics沒有什麼瞭解。我無法弄清楚如何處理它...

我很抱歉如果我不清楚,並且預先感謝任何能夠給我一些幫助的人。

+0

你能解釋一下什麼叫3組是什麼意思? – user1759572

+0

對不起,不知道你的問題是什麼。 –

+0

「重複排列」是您正在尋找的谷歌查詢 – ElKamina

回答

1

我想你想所有的組合爲你的價值觀....

這裏是做在C#泛型方法...

static IEnumerable<IEnumerable<T>> Combinations<T>(IEnumerable<T> list, int length) 
{ 
    if (length == 1) return list.Select(t => new T[] { t }); 

    return Combinations(list, length - 1) 
     .SelectMany(t => list, (t1, t2) => t1.Concat(new T[] { t2 })); 
} 

你這樣稱呼它?

var groups = new List<string>() { "R1", "R2", "R3" }; 
    var values = new List<string>() { "AA", "AB", "BB" }; 
    var combinations = Combinations(values, groups.Count); 
    var i = 0; 
    var stringFormat = string.Join(", ", groups.Select(x => x +"={"+ i++ +"}")); 
    // stringFormat looks like "R1={0}, R2={1}, R3={2}" 
    foreach (var value in combinations) 
    { 
     var arrayOfValues = value.ToArray(); // each value is a list of the combinations. 
     Console.WriteLine(string.Format(stringFormat, arrayOfValues)); 
    } 

所以我已經包括做哪一個更容易遵循硬編碼的方式...你提到你的經驗不足

var values = new List<string>() { "AA", "AB", "BB" }; 
    foreach (var value1 in values) 
    { 
     foreach (var value2 in values) 
     { 
      foreach (var value3 in values) 
      { 
       Console.WriteLine(string.Format("R1 = {0}, R2 = {1}, R3 = {2}", value1, value2, value3)); 
      } 
     } 
    } 

隨着輸出看上去就像這樣......

R1=AA, R2=AA, R3=AA 
R1=AA, R2=AA, R3=AB 
R1=AA, R2=AA, R3=BB 
R1=AA, R2=AB, R3=AA 
R1=AA, R2=AB, R3=AB 
R1=AA, R2=AB, R3=BB 
R1=AA, R2=BB, R3=AA 
R1=AA, R2=BB, R3=AB 
R1=AA, R2=BB, R3=BB 
R1=AB, R2=AA, R3=AA 
R1=AB, R2=AA, R3=AB 
R1=AB, R2=AA, R3=BB 
R1=AB, R2=AB, R3=AA 
R1=AB, R2=AB, R3=AB 
R1=AB, R2=AB, R3=BB 
R1=AB, R2=BB, R3=AA 
R1=AB, R2=BB, R3=AB 
R1=AB, R2=BB, R3=BB 
R1=BB, R2=AA, R3=AA 
R1=BB, R2=AA, R3=AB 
R1=BB, R2=AA, R3=BB 
R1=BB, R2=AB, R3=AA 
R1=BB, R2=AB, R3=AB 
R1=BB, R2=AB, R3=BB 
R1=BB, R2=BB, R3=AA 
R1=BB, R2=BB, R3=AB 
R1=BB, R2=BB, R3=BB 
+0

我正在做一些測試,我認爲你建議解決我的問題的第一種方法。現在,謝謝你,很快我會給你一個反饋,如果它完全解決。 –