2010-12-20 9 views
0

各位すべてに基づいて2つのリスト から組み合わせを動作させるには、これは私が C#の:どのようにマスターリスト

 List<String> MasterList = new List<string> { "A", "B", "C", "D", "E" }; 
     List<String> ListOne = new List<string> { "A", "B", "C" }; 
     List<String> ListTwo = new List<String> { "B", "D" }; 
以下のようなmasterlistと2たchildListを抱えている私の前の質問 How to get moving combination from two List<String> in C#?

のようなものです

私はちょうど私が(前の質問の答え(おかげでダニー・チェン))のように使用していますそのため、上記のリストから実行されている組み合わせを取得する必要があり

 List<String> Result = new List<string>(); 
     Result = ListOne.SelectMany((a, indexA) => ListTwo 
            .Where((b, indexB) => ListTwo 
            .Contains(a) ? !b.Equals(a) && indexB > indexA : 
            !b.Equals(a)).Select(b => string.Format("{0}-{1}", a, b))).ToList(); 

その結果リストは、今私の問題は、4番目のエントリがC-Bですが、それはB-Cする必要があります上記の結果では、ソート問題

ある

 "A-B" 
     "A-D" 
     "B-D" 
     "C-B" 
     "C-D" 

が含まれています。 MasterListの場合、CBの後になります。

私の既存のlinqでこれを行う方法。

どうかお手伝いください。

+1

私はなぜMasterListの理解していない

とにかく、ここであなたがこれまでのために求めてきました結果を生成するものがあります。また、出力は「A-B、A-D、B-D、C-D」でなければならないのでしょうか? –

+0

@ AS-CII:フレンド、 'ResultList'では、項目は' MasterList'の順でなければなりません。すなわち、そのマスターはマスターリストの順序で始まるべきである。 –

+1

上記のコードは "B-D"を生成しない。 –

答えて

1

ここでの正確な要件についてはっきりしていないので、MasterListは2つの項目のどちらを先に表示するかを決定しますか? X1-X2リストの順序はどうですか? CがMasterList内のDの前に出現するのでB-CがB-Dの前に現れるべきであるか?

List<String> MasterList = new List<string> { "A", "B", "C", "D", "E" }; 
List<String> ListOne = new List<string> { "A", "B", "C" }; 
List<String> ListTwo = new List<String> { "B", "D" }; 

ListOne.SelectMany(i => 
ListTwo.Where(i2 => i != i2) 
     .Select(i2 => 
      { 
       if (MasterList.IndexOf(i) < MasterList.IndexOf(i2)) 
        return string.Format("{0}-{1}", i, i2); 
       else 
        return string.Format("{0}-{1}", i2, i); 
      } 
     )); 

出力:

A-B 
A-D 
B-D 
B-C 
C-D 
+0

+1すてきな解決策。これは私が探しているものです –