Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1562 | Anzahl registrierter User: 1893 | Besucher online: 43
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

generische zip funktion


Autor: Roman Wagner
Sprache: C#
Bewertung:
noch nicht bewertet
Anzahl der Aufrufe: 7649
  
Kick it on dotnet-kicks.de  

Beschreibung:

In der Klasse Array werden einige Listenfunktionale implementiert (Foreach, ConvertAll,...) einige Fehlen aber. So zum Beispiel "zip". Das Funktional Zip nimmt als Input zwei Listen (nicht notwendiger Weise gleich en Typs und gleicher Länge) und gibt eine Liste eines eventuell 3. Typs mit der Länge der kürzeren der beiden Ausgangslisten zurück. Jedes der Ergebniselemente wird über eine ZipFunktion berechnet.

Im Beispiel wird ein Enumerator erzeugt. Dadurch ist es möglich das Funktional als Lazy zu implementieren. Es werden die einzelnen Elemente also erst dann berechnet wenn auf sie zugegriffen wird.


Abgelegt unter: Zip, Enumerator, Generic, yield, lazy.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/// <summary>
/// Definiert die Funktion zum Erzeugen der Ergebniselemente
/// </summary>
public delegate Tout ZipFunction<TinFirst,TinSecond , Tout>(TinFirst first, TinSecond second);

/// <summary>
/// Implementiert das Zipfunktional auf zwei Listen
/// </summary>
public static IEnumerable<Tout> Zip<TinFirst,TinSecond , Tout>(IEnumerable<TinFirst> first,
    IEnumerable<TinSecond> second, ZipFunction<TinFirst, TinSecond , Tout> zipFunction)
{
    IEnumerator<TinFirst> left = first.GetEnumerator();
    IEnumerator<TinSecond > right = second.GetEnumerator();

    while(left.MoveNext() && right.MoveNext())
    {
        yield return zipFunction(left.Current, right.Current);
    }
}

//Beispiel: die ersten 5 Quadratzehlen (es ist klar dass das auch einfacher geht aber es sit ja auch nur ein Beispiel
int[] aList = { 1, 2, 3, 4, 5 };
int[] bList = { 1, 2, 3, 4, 5 };

IEnumerable<int> square = Zip<int, int, int>(aList, bList, 
delegate(int a, int b)
{
    return a * b;
});
Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)



schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.