csv文字列を含む2つのリストを結合し、その結果を別のcsvと比較する方法

私はfolowingリストを持っています:

List l1 = new List { "A4,A2","A1,A3" };
List l2 = new List { "A5,A6", "A7,A8" };

私はこれらの2つを組み合わせて、コンマで区切られたすべての項目を含むリストを作成する必要があります。 だから私は何かを含むべきで終わるはずです:

A4、A2、A1、A3、A5、A6、A7、A8、A9 <

私は以下の2つのリストを組み合わせて使用​​しました:

string s1 = string.Join(",", l1.ToArray());
string s2 = string.Join(",", l2.ToArray());

var combinedItems = s1 + "," + s2;

次に、A1からA8の要素が含まれていることを確認するために、結果を別のリストと比較する必要があります

var allItems = new List { "A1,A2,A3,A4,A5,A6,A7,A8" };

bool allItemsExist = allItems.Any(combinedItems.Contains);

combinedItems 変数の順序が allItems の順序と一致しないため、これは失敗します。

combinedItems のコンテンツを並べ替えるにはどうすればよいですか、達成しようとしている別の方法がありますか?

0

8 答え

var items = new[] { l1, l2 }
            .SelectMany(x => x.SelectMany(y => y.Split(',')))
            .OrderBy(y => y);

var allItems = new List 
                        { "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8" };

var result = allItems.SequenceEqual(items);
2
追加された
美しい解決策:)
追加された 著者 meorfi,
var items = new[] { l1, l2 }
            .SelectMany(x => x.SelectMany(y => y.Split(',')))
            .OrderBy(y => y);

var allItems = new List 
                        { "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8" };

var result = allItems.SequenceEqual(items);
2
追加された
美しい解決策:)
追加された 著者 meorfi,

brut solution:

      List l1 = new List { "A4,A2", "A1,A3" };
      List l2 = new List { "A5,A6", "A7,A8" };

      var s1 = string.Join(",", l1.ToArray());
      var s2 = string.Join(",", l2.ToArray());

      var combinedItems = s1 + "," + s2;
      var splittedAndOrderedCombinedItems = combinedItems.Split(',').OrderBy(x => x).ToList();

      var allItems = new List { "A1,A2,A3,A4,A5,A6,A7,A8" };
      var firstOrDefault = allItems.FirstOrDefault();

      var splittedAllItems = new List();
      if (firstOrDefault != null) {
        splittedAllItems = firstOrDefault.Split(',').ToList();
      }

      var result = splittedAllItems.Any(splittedAndOrderedCombinedItems.Contains);
1
追加された

brut solution:

      List l1 = new List { "A4,A2", "A1,A3" };
      List l2 = new List { "A5,A6", "A7,A8" };

      var s1 = string.Join(",", l1.ToArray());
      var s2 = string.Join(",", l2.ToArray());

      var combinedItems = s1 + "," + s2;
      var splittedAndOrderedCombinedItems = combinedItems.Split(',').OrderBy(x => x).ToList();

      var allItems = new List { "A1,A2,A3,A4,A5,A6,A7,A8" };
      var firstOrDefault = allItems.FirstOrDefault();

      var splittedAllItems = new List();
      if (firstOrDefault != null) {
        splittedAllItems = firstOrDefault.Split(',').ToList();
      }

      var result = splittedAllItems.Any(splittedAndOrderedCombinedItems.Contains);
1
追加された

あなたはすべてのアイテムを分割することができます:

List l1 = new List { "A4,A2", "A1,A3" }.SelectMany(x => x.Split(',')).ToList();
List l2 = new List { "A5,A6", "A7,A8" }.SelectMany(x => x.Split(',')).ToList();

string combinedItems = string.Join(",", l1.Concat(l2));

List allItems = new List { "A1,A2,A3,A4,A5,A6,A7,A8" }.SelectMany(x => x.Split(',')).ToList();

bool allItemsExist = allItems.All(combinedItems.Contains);
0
追加された

すべての文字列を "A1" "A2"パーツに分割し、並べ替えて結合します。

    List l1 = new List { "A4,A2", "A1,A3" };
    List l2 = new List { "A5,A6", "A7,A8" };
    var result = l1.SelectMany(x => x.Split(',')).Union(l2.SelectMany(x => x.Split(','))).OrderBy(x => x).ToList();
    var str = string.Join("," , result);
    str.Dump();

出力:

A1,A2,A3,A4,A5,A6,A7,A8
0
追加された

すべての文字列を "A1" "A2"パーツに分割し、並べ替えて結合します。

    List l1 = new List { "A4,A2", "A1,A3" };
    List l2 = new List { "A5,A6", "A7,A8" };
    var result = l1.SelectMany(x => x.Split(',')).Union(l2.SelectMany(x => x.Split(','))).OrderBy(x => x).ToList();
    var str = string.Join("," , result);
    str.Dump();

出力:

A1,A2,A3,A4,A5,A6,A7,A8
0
追加された

クイックとダーティー:

        var allItemsList = allItems.First().Split(',').ToList();
        var combinedItemsList = combinedItems.Split(',').ToList();

        bool allItemsExists = combinedItemsList.All(x => allItemsList.Contains(x)); 

カンマ区切りの文字列をリストの1つの項目として保存することは意味がありません。そのため、REALリストを作成してください。

最後のステートメントは、すべてのアイテム(A1〜A8)がallItemsListに含まれているかどうかを判断します。

PS: allItemsExists はテストで true を返します。

0
追加された