Gibt es ein .NET-Äquivalent von Javas List.subList()
, das auf IList<T>
funktioniert?.NET-Äquivalent von ListList() von Java?
Antwort
mit LINQ
list.Skip(fromRange).Take(toRange - fromRange)
Für das generische List<T>
ist es die GetRange(int, int)
Methode.
Edit: Beachten Sie, dass dies eine flache Kopie ist, nicht eine "Ansicht" auf das Original. Ich denke nicht, dass C# genau diese Funktionalität bietet.
Edit2: als Kamarey weist darauf hin, können Sie eine schreibgeschützte Ansicht haben:
List<int> integers = new List<int>() { 5, 6, 7, 8, 9, 10, 11, 12 };
IEnumerable<int> view = integers.Skip(2).Take(3);
integers[3] = 42;
foreach (int i in view)
// output
Das obige 7 drucken, 42, 9.
Von der MSDN-Dokumentation (http://msdn.microsoft.com/en-us/library/21k0e39c.aspx) es tun Es scheint nicht dasselbe zu sein: GetRange() gibt eine flache Kopie zurück, während subList() eine Ansicht zurückgibt (d. h. Änderungen an der UnterListe() werden in der ursprünglichen Liste reflektiert!) –
ok du hast Recht. Nicht sicher, ob dies die genaue Anforderung ist, aber ich werde meine Antwort bearbeiten, um das zu reflektieren. – Razzie
GetRange
ist Ihre Antwort
Nochmal: Es ist nicht * genau * dasselbe, da es eine flache Kopie anstelle einer Ansicht zurückgibt. Das Zurückgeben einer Ansicht ermöglicht einige ziemlich raffinierte Tricks (es macht es beispielsweise unnötig, eine RemoveRange() -Methode bereitzustellen, da sie leicht als listList (x, y) .clear()) geschrieben werden kann. –
Ich muss ehrlich sagen, dass ich nicht wirklich die Vorteile sehe. Außerdem klingen removeRange() und subList.clear() nicht gleich, da das Löschen nicht dem Entfernen eines Bereichs entspricht. Aber gut :-) – Razzie
Sobald Sie das Konzept, dass subList() eine Sicht in die ursprüngliche Liste (und keine Kopie) zurückgibt, wird es offensichtlich, dass someList.subList (1,3) .clear() wird Entfernen Sie Objekte aus der ursprünglichen Liste. Und der wichtigste Teil ist nicht, ob es besser ist oder nicht, aber dass subList() und GetRange() nicht dasselbe tun, also sollten sie nicht als äquivalent präsentiert werden (zumindest nicht ohne einen Disclaimer). –
- 1. ListList kann List nicht zugewiesen werden, warum?
- 2. Scannen von Bilderfassungshardware von Java
- 3. Erstellen von Java von MSBuild
- 4. Java-Äquivalent von Fork in Java-Aufgabe von Ant?
- 5. Übergabe von Datentypen von C++ nach Java/Java nach C++
- 6. Java-Klasse von Jython
- 7. Linux-Befehle von Java
- 8. Ausführen von Java-Anwendungen
- 9. Python GUI von Java
- 10. Implementierung von Java Comparator
- 11. Aufruf PHP von Java
- 12. libxml2 von java
- 13. Bereitstellen von Java-Dateien
- 14. Von Java nach Kotlin
- 15. Rekonstruktion von Java-Befehlszeilenargumenten
- 16. getDateTime von ResultSet java
- 17. Aufruf Java von Clojure
- 18. Schließen von Java InputStreams
- 19. Benchmarking von Java-Programmen
- 20. Java-Entsprechung von swfobject
- 21. Java ArrayList von Arrays?
- 22. Lebensdauer von Java Http
- 23. Activex von Java-Anwendung?
- 24. Finden Jvm von Java
- 25. CPython von Java?
- 26. Verwenden von Zufallsgenerator Java
- 27. Java: Überdosierung von Reflektionen?
- 28. Java-Äquivalent von OpenLayers
- 29. Vorteile von Java Cloning
- 30. Vergleichen von Strings Java
Gibt dies eine Ansicht in die ursprüngliche Liste oder eine Kopie des Bereichs zurück? –
Funktioniert auf IList, nicht nur auf der Liste, das ist, was ich gesucht habe. – ripper234
@Joachim Sauer: Dies ist eine Abfrage und das Ergebnis hängt davon ab, wie es ausgewertet wird. Während der Auswertung durchläuft es Listenelemente, die eine Regel anwenden. Dies ist nicht gerade analog für die SubList-Funktion von Java, und es ist ein Fehler, sie in diesem Fall zu vergleichen. – Kamarey