Das könnte schrecklich trivial sein, aber ich habe Probleme, eine Antwort zu finden, die in weniger als 2 Mal ausgeführt wird. Nehmen wir an, ich habe zwei String-Arrays und möchte wissen, welche Strings in beiden Arrays existieren. Wie würde ich das tun, effizient, in VB.NET oder ist gibt es eine Möglichkeit, dies als eine doppelte Schleife zu tun?VB.NET Array Intersection
Antwort
Der einfache Weg (unter der Annahme, dass kein. NET 3.5) ist, die Zeichenfolgen aus einem Array in einer Hashtabelle auszugeben, und dann durch das andere Array durch die Hashtabelle zu überprüfen. Das sollte viel schneller sein als eine n^2 Suche.
Es war wahrscheinlich am besten, wenn sie in einem hashset, einem Wörterbuch oder einer Liste an erster Stelle als ein Array waren. –
Beide Listen sortieren. Dann können Sie mit Sicherheit wissen, dass, wenn der nächste Eintrag in Liste A "Kopfsteinpflaster" ist und der nächste Eintrag in Liste B "definitiv" ist, dann "Kopfsteinpflaster" nicht in Liste B ist. Bewegen Sie einfach den Zeiger/Zähler auf die Liste das untergeordnete Ergebnis und die Rangliste aufsteigen.
Zum Beispiel:
Liste 1: D, B, M, A, I
Liste 2: I, A, P, N, D, G
sortiert:
Liste 1: A, B, D, I, M
Liste 2: A, D, G, I, N, P
A gegen A -> Spiel, Speicher A, vorrücken sowohl
B vs D - -> B D vs D -> Übereinstimmung, s vorrücken tore D, die beide
I vs G -> I> G, vorzurücken 2
I vs I -> Spiel, Speicher I, vorzurücken beide
M vs N -> M Liste 1 hat keine weiteren Artikel , Verlassen.
Liste der Spiele ist A, D, I
2 Liste sortiert O (n log (n)) plus O (n) Vergleiche macht dies O (n (log (n) + 1)).
Wenn eines der Arrays sortiert Sie es in der inneren Schleife eine binäre Suche tun, das wird die Zeit O(n log n)
verringern Wenn Sie beide Felder sortieren, Sie dann durch sie jeder einmal gehen kann Finde alle passenden Strings.
Pseudo-Code:
while(index1 < list1.Length && index2 < list2.Length)
{
if(list1[index1] == list2[index2])
{
// You've found a match
index1++;
index2++;
} else if(list1[index1] < list2[index2]) {
index1++;
} else {
index2++;
}
}
Dann haben Sie es zu der Zeit, reduziert es die Sortierung zu tun braucht.
- 1. Intersection-Algorithmus
- 2. python date interval intersection
- 3. Boost Intersection funktioniert nicht
- 4. Minimal Intersection Layout-Algorithmus
- 5. Intersection-Typ verhindert Kompilierung
- 6. 4clojure: set-intersection, rekursives Lambda
- 7. WorldWind Sphere Line Intersection Bug?
- 8. ListBox & Zweidimensionales Array VB.net
- 9. VB.NET Array Arithmetic
- 10. VB.NET-Prädikat-Array Find
- 11. Äquivalent von Array() in VB.NET?
- 12. Konstante Shared-Array in vb.net
- 13. VB.net Liste/Array von Objekten
- 14. Polygon Intersection fehlschlägt, Kollision "Größe" zu groß
- 15. langsame Implementierung von Union und Intersection
- 16. Circle - Line Intersection funktioniert nicht richtig?
- 17. Line Intersection mit gedrehtem Box Collider-Objekt
- 18. Artikel im Array von Objekten suchen VB.NET
- 19. vb6 zu vb.net: Array von Steuerelementen
- 20. VB.net - Schnellere Textbearbeitung/Speichern in Array
- 21. VB.net get Elementwert in String-Array
- 22. vb.net: alle Inhalte der String-Array Clearing
- 23. Konvertiere ListBox.ObjectCollection in String Array in VB.NET
- 24. CGAL Intersection Circle und vertikale Linien (keine Segmente)
- 25. Get intersection Elemente von verschachtelten Wörterbüchern in Python
- 26. VB.NET: Wie Referenz VB.NET-Modul?
- 27. VB.NET Wie man ein neues leeres Array bekannter Länge deklariert
- 28. Wie erstellen Sie ein neues Array in VB.NET?
- 29. Convert JSON Objektarray Wert String-Array in VB.NET ohne Schlaufe
- 30. erstellen Vb.net Äquivalent von PHP-Array mit mehreren Werten
Welche Version von .NET? in 3.5 können Sie die Linq-Erweiterung für Intersect verwenden –
Ich glaube, wir verwenden 2,0 an dieser Stelle. Firmen-Hosting-Politik, leider. – willasaywhat