So kombinieren Sie 2 Listen, die CSV-Strings enthalten, und vergleichen Sie das Ergebnis mit einem anderen CSV

Ich habe die folgende Liste:

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

Ich muss diese 2 kombinieren und eine Liste erstellen, die alle durch Komma getrennten Elemente enthält. also sollte ich am Ende etwas haben mit:

A4, A2, A1, A3, A5, A6, A7, A8, A9

Ich habe Folgendes verwendet, um die 2 Listen zu kombinieren:

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

var combinedItems = s1 + "," + s2;

Dann muss ich das Ergebnis mit einer anderen Liste vergleichen, um sicherzustellen, dass es Elemente von A1 bis A8 enthält

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

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

Dies schlägt fehl, da die Reihenfolge der Variablen combinedItems nicht mit der Reihenfolge allItems übereinstimmt.

Wie kann ich den Inhalt von combinedItems sortieren oder gibt es eine andere Möglichkeit, das zu tun, was ich erreichen möchte?

0

8 Antworten

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
hinzugefügt
schöne Lösung :)
hinzugefügt der Autor meorfi, Quelle
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
hinzugefügt
schöne Lösung :)
hinzugefügt der Autor meorfi, Quelle

brut Lösung:

      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
hinzugefügt

brut Lösung:

      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
hinzugefügt

Sie können alle Elemente aufteilen:

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
hinzugefügt

Teile alle Saiten auf ihre "A1" "A2" Teile, sortiere sie und verbinde sie.

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

Ausgabe:

A1,A2,A3,A4,A5,A6,A7,A8
0
hinzugefügt

Teile alle Saiten auf ihre "A1" "A2" Teile, sortiere sie und verbinde sie.

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

Ausgabe:

A1,A2,A3,A4,A5,A6,A7,A8
0
hinzugefügt

Schnell und dreckig:

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

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

Es macht keinen Sinn, die durch Kommas getrennte Zeichenfolge als ein Element in einer Liste zu speichern, also erstellen Sie eine REAL-Liste daraus.

Meine letzte Aussage bestimmt, ob jedes Item (A1-A8) in der allItemsList enthalten ist.

PS: allItemsExists gibt true in meinem Test zurück.

0
hinzugefügt