Hallo,
ich würde gerne ein unsortiertes Array durchsuchen.
Folgendes Szenario habe ich: 2 CSV-Dateien die in vier Spalten enthalten, 3 davon sind Beschreibungen, die diesen Wert eindeutig machen und die vierte Spalte ist der Wert, mit dem auch gerechnet werden soll.
Eine Datei könnte so in der Art aussehen (eigentlich sind es Daten aus dem Geschäft, die ich sicherheitshalber mal anders dargestellt habe):
Ort | PLZ | Strasse | Wert
Musterstadt | 12345 | Musterstr | 0.87
Musterstadt | 12345 | Abcstr | 0.63
Musterstadt | 12346 | Teststr | 0.93
Musterhausen | 23439 | Abcstr | 0.77
Musterhausen 23439 | Teststr | 0.38
Man sieht, es können z.B. Ort und PLZ gleich sein, die Straße ist dann jedoch anders und die Kombination der 3 Werte (Ort, PLZ, Straße) macht den Wert (Spalte "Wert") eindeutig.
Jetzt habe ich in einer CSV-Datei stehen
bla.blubb.ort_0 = Musterstadt
bla.blubb.ort_1 = Musterhausen
bla.blubb.plz_0 = 12345
bla.blubb.str_1 = Musterstr
...
Diese lese ich aus der Properties aus und habe dann entsprechend 3 Arrays ort[], plz[] und strasse[]. Index 0 bei ort wäre dann eben Musterstadt, 1 Musterhausen,...
Wenn ich nun die CSV einlese möchte ich das ja Zeilenweise tun und wenn ich dann z.B. auf Musterstadt stoße will ich einfach das Array ort[] durchsuchen, welchen Index Musterstadt hat, dann die nächste Spalte, welchen Index z.B. 12345 (in plz[]) hat und dann, welchen Index Musterstr (in strasse[]) hat.
Anhand dieser Indexe fülle ich dann ein Array wert[][][].
Bei mir würde das z.B. dann ergeben
wert[0][0][1] = new Double(0.87);
Wenn nun jemand ein Formular absendet, in dem er per Dropdown die entsprechenden Felder ausgewählt hat muss ich mir die übermittelten Werte (values des Dropdown-Feldes sind dann logischerweise die Indexe) als Index in das Array eintragen und kann dann damit rechnen.
Mein Problem ist jetzt nur, dass ich über Arrays.binarySearch() nur sortierte Arrays durchsuchen kann (was sicher auch sinnvoll ist, nur in meinem Fall weiß ich das nicht so recht). Wenn ich mein Array nun aber sortiere passen später die Indexe mit den Values aus den Dropdown-Felder nicht mehr überein.
Gibt es also eine fertige Funktion, die dies ermöglicht? Was haltet ihr ansonsten in Sachen Performance von meiner vorgehensweise? Ich müsste die CSV-Dateien halt ständig neu einlesen, da sich die Werte ständig ändern.
Vielen Dank und viele Grüße,
Dirk
ich würde gerne ein unsortiertes Array durchsuchen.
Folgendes Szenario habe ich: 2 CSV-Dateien die in vier Spalten enthalten, 3 davon sind Beschreibungen, die diesen Wert eindeutig machen und die vierte Spalte ist der Wert, mit dem auch gerechnet werden soll.
Eine Datei könnte so in der Art aussehen (eigentlich sind es Daten aus dem Geschäft, die ich sicherheitshalber mal anders dargestellt habe):
Ort | PLZ | Strasse | Wert
Musterstadt | 12345 | Musterstr | 0.87
Musterstadt | 12345 | Abcstr | 0.63
Musterstadt | 12346 | Teststr | 0.93
Musterhausen | 23439 | Abcstr | 0.77
Musterhausen 23439 | Teststr | 0.38
Man sieht, es können z.B. Ort und PLZ gleich sein, die Straße ist dann jedoch anders und die Kombination der 3 Werte (Ort, PLZ, Straße) macht den Wert (Spalte "Wert") eindeutig.
Jetzt habe ich in einer CSV-Datei stehen
bla.blubb.ort_0 = Musterstadt
bla.blubb.ort_1 = Musterhausen
bla.blubb.plz_0 = 12345
bla.blubb.str_1 = Musterstr
...
Diese lese ich aus der Properties aus und habe dann entsprechend 3 Arrays ort[], plz[] und strasse[]. Index 0 bei ort wäre dann eben Musterstadt, 1 Musterhausen,...
Wenn ich nun die CSV einlese möchte ich das ja Zeilenweise tun und wenn ich dann z.B. auf Musterstadt stoße will ich einfach das Array ort[] durchsuchen, welchen Index Musterstadt hat, dann die nächste Spalte, welchen Index z.B. 12345 (in plz[]) hat und dann, welchen Index Musterstr (in strasse[]) hat.
Anhand dieser Indexe fülle ich dann ein Array wert[][][].
Bei mir würde das z.B. dann ergeben
wert[0][0][1] = new Double(0.87);
Wenn nun jemand ein Formular absendet, in dem er per Dropdown die entsprechenden Felder ausgewählt hat muss ich mir die übermittelten Werte (values des Dropdown-Feldes sind dann logischerweise die Indexe) als Index in das Array eintragen und kann dann damit rechnen.
Mein Problem ist jetzt nur, dass ich über Arrays.binarySearch() nur sortierte Arrays durchsuchen kann (was sicher auch sinnvoll ist, nur in meinem Fall weiß ich das nicht so recht). Wenn ich mein Array nun aber sortiere passen später die Indexe mit den Values aus den Dropdown-Felder nicht mehr überein.
Gibt es also eine fertige Funktion, die dies ermöglicht? Was haltet ihr ansonsten in Sachen Performance von meiner vorgehensweise? Ich müsste die CSV-Dateien halt ständig neu einlesen, da sich die Werte ständig ändern.
Vielen Dank und viele Grüße,
Dirk