Ich habe ungefähr 10.000 Datensätze. Jeder Datensatz hat 2 Felder: Ein Feld ist eine Zeichenfolge mit bis zu 300 Zeichen Länge und das andere Feld ist ein Dezimalwert. Dies ist wie ein Produktkatalog mit Produktnamen und dem Preis jedes Produkts.
Was ich tun muss, ist, dass der Benutzer ein beliebiges Wort eingeben und alle Produkte, die dieses Wort enthalten, zusammen mit seinen Preisen in einer Listbox anzeigen kann. Das ist alles.
Im Moment verwende ich eine XML-Datei, aber ich dachte, eine Sammlung zu verwenden, damit ich alle Werte in den Code einbetten kann, ist einfacher. Danke für deine Vorschläge.
Ein Wörterbuch wird den Job machen. Wenn Sie jedoch schnelle Teilübereinstimmungen durchführen (z. B. die Suche nach den Benutzertypen), erzielen Sie möglicherweise eine bessere Leistung, wenn Sie mehrere Schlüssel erstellen, die auf dasselbe Element zeigen. Zum Beispiel könnte das Wort "Apple" mit "Ap", "App", "Appl" und "Apple" gefunden werden.
Ich habe diesen Ansatz für eine ähnliche Anzahl von Datensätzen mit sehr guten Ergebnissen verwendet. Ich habe meine 10K-Quellen in ungefähr 50K eindeutige Schlüssel umgewandelt. Jeder dieser Dictionary-Einträge verweist auf eine Liste, die Verweise auf alle Übereinstimmungen für diesen Begriff enthält. Sie können dann diese viel kleinere Liste effizienter durchsuchen. Trotz der großen Anzahl von Listen, die dies erzeugt, ist der Speicherbedarf ziemlich vernünftig.
Sie können auch eigene Schlüssel erstellen, wenn Sie häufig verwendete Rechtschreibfehler umleiten oder auf verwandte Elemente verweisen möchten. Dies beseitigt auch die meisten Probleme mit eindeutigen Schlüsseln, da jeder Schlüssel auf eine Liste zeigt. Ein einzelner Gegenstand kann durch jedes der Wörter in seinem Namen klassifiziert werden; Dies ist sehr nützlich, wenn Sie lange Produktnamen mit mehreren Wörtern haben. Wenn Sie Ihre Elemente klassifizieren, kann jedes Wort im Namen einer oder mehreren Schlüssel zugeordnet werden.
Ich sollte auch darauf hinweisen, dass das Erstellen und Klassifizieren von 10K-Elementen nicht lange dauern sollte, wenn es richtig gemacht wird (ein paar Hundert Millisekunden sind vernünftig). Die Ergebnisse können so lange wie gewünscht mit Application
, Cache
oder statischen Elementen zwischengespeichert werden.
Zusammenfassend ist die resultierende Struktur ein Dictionary<string, List<T>>
, wobei die Zeichenkette eine Kurzform ist (2-6 Zeichen funktioniert gut), aber ein eindeutiger Schlüssel. Jeder Schlüssel zeigt auf ein List<T>
(oder eine andere Sammlung, wenn Sie so geneigt sind) von Elementen, die mit diesem Schlüssel übereinstimmen. Wenn eine Suche durchgeführt wird, suchen Sie den Schlüssel, der dem vom Benutzer angegebenen Begriff entspricht. Abhängig von der Länge Ihrer Schlüssel können Sie die Suche des Benutzers auf die maximale Schlüssellänge beschränken. Nachdem Sie die korrekte untergeordnete Sammlung gefunden haben, durchsuchen Sie diese Sammlung nach einer vollständigen oder teilweisen Übereinstimmung mit der von Ihnen gewünschten Methode.
Zu guter Letzt möchten Sie möglicherweise eine leichtgewichtige Struktur für jedes Element in der Liste erstellen, damit Sie zusätzliche Informationen über das Element speichern können. Sie können beispielsweise eine kleine Produktklasse erstellen, in der Name, Preis, Abteilung und Beliebtheit des Produkts gespeichert sind. Dies kann Ihnen helfen, die Ergebnisse zu verfeinern, die Sie dem Benutzer zeigen.
Alles in allem können Sie intelligente, detaillierte, unscharfe Suchen in Echtzeit durchführen.
Die oben genannten Strukturen sollten eine Funktionalität bieten, die in etwa einem trie entspricht.
Tags und Links c# xml collections