IEnumerable.UnionAll

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    IEnumerable.UnionAll

    Hallo,

    suche nach so einer UnionAll-Möglichkeit:

    VB.NET-Quellcode

    1. Sub Main()
    2. Dim a = {1, 2, 3}
    3. Dim b = {2, 3, 4}
    4. Dim c = a.Union(b, New NoComparer) 'Result c = {1,2,3,2,3,4}
    5. End Sub
    6. Public Class NoComparer
    7. Implements IEqualityComparer(Of Integer)
    8. Private rnd As New Random
    9. Public Overloads Function Equals(x As Integer, y As Integer) As Boolean Implements IEqualityComparer(Of Integer).Equals
    10. Return False
    11. End Function
    12. Public Overloads Function GetHashCode(obj As Integer) As Integer Implements IEqualityComparer(Of Integer).GetHashCode
    13. Return rnd.Next.GetHashCode
    14. End Function
    15. End Class

    Ich möchte das explizit nicht als eigene Schleife coden, auch wenn das natürlich in erster Linie geeigneter wäre. Aber vielleicht kann man den "Nicht-Vergleich" besser anstellen?

    Viele Grüße
    @Haudruferzappeltnoch Nimm das IComparable<Integer>-Interface Deiner NoComparer-Klasse.
    Wenn Du in der Compare-Methode 0 zurück gibst, wird nicht sortiert.
    Wenn Du noch einen NoComparer-Konstruktor mit Boolean-Parameter einfügst, kannst Du das innerhalb der Klasse schaltbar machen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    C#-Quellcode

    1. List<int> listA = new List<int>() { 1, 2, 3 };
    2. List<int> listB = new List<int>() { 4, 5, 6 };
    3. List<int> listC = new List<int>() { 7, 8, 9 };
    4. List<int> all = listA.Concat(listB).Concat(listC).ToList();
    5. List<List<int>> listOfAllLists = new List<List<int>>() {
    6. listA,
    7. listB,
    8. listC
    9. };
    10. List<int> all2 = listOfAllLists.SelectMany(x => x).ToList();


    Verstehe noch nicht was du vor hast. Liste verknüpfst du einfach mit Concat. Hast du eine Liste von Listen und möchtest diese Unterlisten auf eine Ebenen bringen, zu einer großen, dann einfach mit SelectMany. Oder was hast du vor?