Darf jemand bitte erklären, was ein Tuple ist und wie man es in einem Real World Scenario verwendet. Ich würde gerne herausfinden, wie dies meine Programmiererfahrung bereichern kann.Was und wann Tuple verwenden?
Antwort
Diese msdn article erklärt es sich sehr gut mit den Beispielen, „Ein Tupel ist eine Datenstruktur, die eine bestimmte Anzahl und Reihenfolge von Elementen hat“.
Tupeln werden üblicherweise in vier Arten verwendet:
Um einen einzelnen Satz von Daten darstellen. Ein Tupel kann z. B. einen Datenbankdatensatz darstellen, und seine Komponenten können einzelne Felder des Datensatzes darstellen.
Um einen einfachen Zugang zu und Manipulation, um einen Datensatz bereitzustellen.
So geben Sie mehrere Werte aus einer Methode zurück, ohne die Parameter (in C#) oder (in Visual Basic) zu verwenden.
Um mehrere Werte auf ein Verfahren durch einen einzelnen Parameter. Für Beispiel hat die
Thread.Start(Object)
Methode einen einzigen Parameter, der Sie einen Wert der Methode lässt liefern, die der Faden bei Startzeit ausgeführt wird. Wenn Sie einTuple<T1, T2, T3>
Objekt als Methode Argument angeben, können Sie die Startroutine des Threads mit drei Datenelementen versorgen.
Ein Tupel können Sie mehrere Werte von möglicherweise unterschiedlichen Typen zu einem einzigen Objekt kombinieren, ohne eine benutzerdefinierte Klasse erstellen zu müssen. Dies kann nützlich sein, wenn Sie eine Methode schreiben möchten, die beispielsweise drei verwandte Werte zurückgibt, aber keine neue Klasse erstellen soll.
Normalerweise wenn Sie eine Klasse erstellen sollten, da dies ermöglicht es Ihnen, jede Eigenschaft nützliche Namen zu geben. Code, der Tupel wird schnell unlesbar geworden, da die Eigenschaften genannt Item1
, Item2
, Item3
, etc ..
Tuple Klassen ermöglichen es Entwicklern, ‚schnelle und faul‘ durch nicht definiert, eine bestimmte Klasse für eine bestimmte Verwendung ausgiebig verwendet.
Die Eigenschaftsnamen sind element1, Element2, Item3 ..., die in einigen Fällen oder ohne Dokumentation kann nicht sinnvoll sein.
Tuple-Klassen haben stark generische Parameter eingegeben. Dennoch können Benutzer der Tuple-Klassen aus der Art der generischen Parameter schließen.
Also sollte C# 7 es einfacher gemacht haben, Klassen/Objekte on-the-fly anstatt dieser Tupel-Sache zu erstellen? –
Der Unterschied zwischen einem Tupel und einer Klasse ist, dass ein Tupel keine Eigenschaftsnamen hat. Das ist fast nie eine gute Sache, und ich würde nur ein Tupel verwenden, wenn die Argumente ziemlich bedeutungslos sind, wie in einer abstrakten mathematischen Formel Eg. Der abstrakte Kalkül über 5,6,7 Dimensionen könnte ein Tupel für die Koordinaten enthalten.
In diesem Fall (wo wahrscheinlich die Arten von Werten sind die gleichen) mit einem einfachen Array ist nicht genug? Es gibt einen Vorteil, ein Tuple zu verwenden? –
Die Typen könnten genauso einfach anders sein, aber ich denke, die IComparable-Implementierung könnte manchmal im homogenen Fall von Vorteil sein. Wie Sie sagen, würde ich geneigt sein, ein Array für einfachere Szenarien zu verwenden. – Kaido
Sehr nette Antwort! –
Dies ist das Wichtigste, was man über den Tuple-Typ wissen sollte. Tuple ist eine Klasse, keine Struktur. Es wird somit auf dem verwalteten Heap zugewiesen. Jede Klasseninstanz, die zugewiesen wird, trägt zur Last der Garbage Collection bei.
Hinweis: Die Eigenschaften Item1, Item2 und weitere haben keine Setter. Sie können sie nicht zuweisen. Das Tupel ist unveränderlich, sobald es im Speicher erstellt wurde.
_ "Burden" _ - haben Sie jemals ein Garbage-Collection-Problem beobachtet? – Gusdor
Absolut! Denken Sie an den Code für die Verarbeitung der Netzwerkkommunikation. Es verteilt und verteilt Tonnen von Speicher, so dass alle paar Minuten der GC ausgeführt wird und einige Sekunden dauern kann. Dies ist nicht akzeptabel, wenn sich etwas Downstream auf diese Daten in Echtzeit verlässt. Ein anderes Beispiel ist ein Gerät mit eingeschränkten Ressourcen, z. B. ein mobiles Gerät, auf dem eine Echtzeit-App ausgeführt wird, z. B. eine App für Wegbeschreibungen. – stuckintheshuck
- 1. Was ist Tuple? Und Tupel vs. Liste vs. Vektor?
- 2. Wann node.js verwenden und wann Ajax verwenden?
- 3. Wann System() verwenden und wann execv *() verwenden?
- 4. Wann Datenbankansichten verwenden und wann nicht?
- 5. Luftstrom: Wann SellerieExecutor und wann MesosExecutor verwenden
- 6. Wann und wann nicht CoreAnimation verwenden
- 7. Konvertierung zwischen std :: tuple und boost :: tuple
- 8. Wann "if" und "wann" in Clojure verwenden?
- 9. Wann verwenden wir POJO und wann verwenden wir SLSB
- 10. Wann IEquatable verwenden und warum
- 11. Wann concat verwenden und anhängen?
- 12. Wann zu verwenden und wann nicht Python 3.5 `erwarten 'verwenden?
- 13. Wann socket.io zu verwenden und wann Ajax zu verwenden
- 14. Wann SoapObject und SoapPrimitive verwenden
- 15. Wann MVC und EZB verwenden?
- 16. Toast versus Dialogfelder: Was wann zu verwenden?
- 17. C++ Strings, wann was zu verwenden?
- 18. Was ist ein Mock und wann sollten Sie es verwenden?
- 19. Was ist __declspec und wann muss ich es verwenden?
- 20. Was ist SELF JOIN und wann würdest du es verwenden?
- 21. SignInManager, was ist es und wie, wann zu verwenden?
- 22. Was ist SAPI und wann würden Sie es verwenden?
- 23. Was ist kein Bereich Bean und wann es zu verwenden?
- 24. Was ist ein Volltextindex und wann sollte ich ihn verwenden?
- 25. JTable.clearSelection() vs Jtable.getSelectionModel.clearSelection() - Wann verwenden was?
- 26. Was sind einige Anwendungsfälle für Tuple-Strukturen?
- 27. Wann zu verwenden behalten und wann zu kopieren
- 28. Jedis - Wann verwenden wir returnBrokenResource()
- 29. Wann sollte ich Hive-Engine MR verwenden und wann TEZ?
- 30. Wann Vektoren und wann Arrays in C++ verwenden?
Ich verwende es maximal für 2 Werte und jede von verschiedenen Typen, d. H. Zeichenfolge, int. Sonst wird es der schlechteste Code, den du schreiben kannst. – Ondra
Halten Sie die Nutzung begrenzt, vielleicht bevorzugen Sie es nur privat innerhalb einer Klasse/Modul zu verwenden. Außerdem kann die Tupel-Verwendung, die komplexe Typen ("Kunde", "Mitarbeiter" usw.) enthält, etwas einfacher als primitive sein. Nichts ist schlimmer, als zu versuchen, mit vielen Tupel s zu arbeiten. –