2016-06-29 22 views
-1

Ich habe zu speichern, dauerhaft (oder zumindest bis zum nächsten Ausführung), eine Tabelle wie:Welche Datenstruktur sollte ich verwenden? Hashtabelle, Array ...?

| ID | Color | 
|------|---------| 
| 0001 | Red | 
| 0002 | Blue | 
| 0003 | Green | 

Ich dachte, es in einer XML-Datei extern zu speichern, aber ich weiß nicht, welche Strukturdaten soll ich Verwenden Sie intern, um auf diese Daten zuzugreifen, da ich eine Art iteratives Element haben möchte, aber schnell und einfach darauf zugreifen und in eine externe XML-Datei speichern kann. Wenn ich eine neue Beziehung hinzufügen möchte, muss die ID 0004 lauten.

Ich meine, sollte ich Hashtable, DataTable, Array ... verwenden? Sollte ich den Weg ändern, diese Beziehungen zu exportieren, oder ist der beste (einfache und schnelle) Weg, sie in eine XML-Datei zu exportieren?

+1

Bitte beachten Sie, dass der Datentyp, den Sie zum Speichern einer Sammlung von Elementen verwenden, sich auf Ihre Laufzeitanforderungen bezieht (mindestens Leistung, Speichernutzung und Verwendungsmuster - Einfügen/Löschen/Suchgeschwindigkeit). Sie müssen nicht dieselbe Struktur beibehalten, wenn Sie Daten persistent machen (z. B. kann eine Hashtabelle einfach als Massensatz von Knoten gespeichert werden). Speicheranforderungen sind eine andere Geschichte mit unterschiedlichen Möglichkeiten: Müssen Sie diese Datei manuell bearbeiten? Verwenden Sie es als Austauschformat? Es muss besonders klein sein? Müssen Sie mit der Versionsverwaltung umgehen? –

+0

Was ist mit einer Liste? Die ID kann nur der Listenindex sein. Es gibt zu wenig Informationen darüber, was Sie eigentlich mit diesen Daten machen müssen, was die ID bedeutet, wie Sie darauf zugreifen, usw. Es ist jedoch wahrscheinlich sowieso auf der Grundlage von Meinungen. –

+0

ID-Sache _kann etwas trickreicher sein, weil Sie nicht einfach die Anzahl der Elemente in der Sammlung verwenden können, um die nächste ID zu kennen (außer Sie verbieten Löschungen). Wie man die nächste ID bekommt, kann so einfach sein wie eine Abfrage, um die aktuell verwendete zu finden (wenn Nebenläufigkeit und Geschwindigkeit/Sammlungsgröße kein Problem sind), sonst müssen Sie _next ID_ (oder die letzte ...) irgendwo speichern (eventuell behalten) thread-safe) –

Antwort

1

Seit Generika gibt es fast keinen Grund mehr, Hashtable mehr zu verwenden. Die beste Möglichkeit, diese Werte im Speicher zu speichern, ist das allgemeine Wörterbuch (siehe: https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx). Angenommen, Ihre "ID" ist eine int und Ihre "Farbe" ist eine string, verwenden Sie: Dictionary<int, string>. Diese Wörterbücher sind schnell (O (1) -Operation), und sie benötigen keine Umwandlungen wie die Hashtable.

Zum Speichern in einer Datei gibt es mehrere Optionen. Sie könnten versuchen, das Wörterbuch in einer Klasse setzen, und speichern Sie die ganze Klasse in eine XML-Datei mit:

0

Ich denke, Sie können mit DataTable gehen, wenn Sie Datensätze in XML konvertieren möchten. Es hat DataTable.WriteXml() Methode, die schön Ihre Arbeit erledigt.

Aber wenn Sie schneller Zugriff und einige Manipulation benötigen, gehen Sie mit Wörterbuch. Es ist viel schneller als DataTable atleast beim Zugriff.

0

Wie viele Daten gibt es? Ändert sich das? Wie werden die Daten abgerufen?

Wenn es Millionen von Zeilen gibt, die sich nicht ändern und die Suche immer nach ID erfolgt, dann ist wahrscheinlich eine Dictionary<int, Color> die beste.

Wenn es einige Dutzend Zeilen gibt, die aktualisiert werden und auf die von beiden Feldern zugegriffen wird, ist ein einfaches Array eines benutzerdefinierten Typs (ID- und Farbeigenschaften) am einfachsten (die Daten müssen nicht gepflegt werden) Bestellung spart genug, um eine teurere Nachschlagen zu haben).

(In beiden Fällen ist ein einfaches Persistenzformat am besten, wenn Sie die gesamte Arbeit im Speicher abarbeiten: Sie erhalten die Flexibilität zur Laufzeit, wo Sie sie benötigen.) Irgendeine echte Situation wird dazwischen liegen. Am Ende, wenn die Leistung wichtig genug ist, werden Sie einen Weg versuchen und messen; dann eine andere Art und Weise. (Daher ist ein wenig Abstraktion, um die internen Details zu verbergen, der wichtige Ort, um zu beginnen.) Wiederholen Sie, bis Sie Ihre Leistungsanforderungen erfüllen.

+0

Die Daten wachsen logarithmisch zur Stabilisierung (ich berechne unter 100) abhängig von der Anzahl der Ausführungen. Ich brauche nur ID und eine Zeichenfolge, also brauchen Sie keine große Größe in der Datei, um es zu speichern. Ich möchte nur eine schnelle und einfache Methode zum Ändern und Importieren und Exportieren der Daten. Danke –

+0

@JoseMMartin Bei dieser Größe wird so ziemlich alles schnell sein: Sie haben nicht genug Daten, um Slow Downs zu erstellen. – Richard

Verwandte Themen