Як аб'яднаць 2 спісаў, якія змяшчаюць радок CSV і параўнаць вынік з іншым CSV

У мяне ёсць спіс на наступны:

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

Мне трэба, каб аб'яднаць гэтыя 2 і стварыць спіс, які змяшчае ўсе элементы, падзеленыя коскі, так што я павінен у канчатковым выніку з чым-то, якое змяшчае:

<�Р> А4, А2, А1, А3, А5, А6, А7, А8, А9 </р>

Я выкарыстаў наступны сумясціць 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, крыніца

брют рашэнне:

      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" };
      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
дададзена

Падзяліць усе радкі ў іх часткі «» A2 «A1», сартуем іх і далучыцца да іх.

    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
дададзена

Падзяліць усе радкі ў іх часткі «» A2 «A1», сартуем іх і далучыцца да іх.

    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)); 

Гэта не мае ніякага сэнсу, каб захаваць коскай радкі ў якасці аднаго элемента ў спісе, так што РЭАЛЬНЫ спіс з яго.

Маё апошняе зацвярджэнне вызначае, калі кожны тавар (A1-A8) змяшчаецца ў allItemsList.

PS: allItemsExists вяртае True ў маім цесцю.

0
дададзена