kostenloser Webspace werbefrei: lima-city


Index eines Arrays für einen Wert bekommen

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Hallo, bei dieser Frage geht es darum den Index eines Arrays für einen bestimmten Wert zu ermitteln. Nehmen wir folgendes Arraybeisiel an.

    String[] months = new String[]{"Januar", "Februar",..., "Dezember"}


    Gegeben sei ein Wert z.B. "Februar", für den ich die Position im Array bestimmen möchte (Das wäre in diesem Fall die "1").
    Ich möchte es vermeiden jeden einzelnen Wert im Array mit meinem String zu vergleichen, dh. ich suche einen Weg ohne For-Schleife. Hat jemand eine Idee?

    Beitrag zuletzt geändert: 9.12.2011 14:18:20 von pixilab
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    Dann mußte sicher assoziative Arrays verwenden ...

    Das basiert dann nicht mehr auf (Index-)Zahlen.
  4. sonok

    Moderator Kostenloser Webspace von sonok

    sonok hat kostenlosen Webspace.

    snix schrieb:
    jo kannste.

    schleife, n=0 durchrattern bis "wort" == "februar" und dann einen counter, der bei 0 anfängt.

    falls es nicht hilft, sag ichs dir nachher ausführlicher.


    [...] dh. ich suche einen Weg ohne For-Schleife.

    Du beschreibst doch genau das, was er nicht möchte :confused:
  5. jo hast recht war mist, hab mich auf die for schleife, gestützt, aber er wird gar keine schleife haben wollen.



    musste per hashtabelle machen (naja bei den kleinen arrays viel zu aufwendig) oder sortieren und nen effizienteren suchalgorithmus verwenden (auch für sonen array viel zu aufwendig).

    Beitrag zuletzt geändert: 9.12.2011 15:50:18 von snix
  6. Autor dieses Themas

    pixilab

    Kostenloser Webspace von pixilab

    pixilab hat kostenlosen Webspace.

    Hab es erstmal mit Arrays gemacht, ist dann ein Einzeiler. Hoffe das ist in der Methode ganz optimal und ohne Schleifen gelöst (Trau mich nicht die Referenz anzuschauen) :)

    Arrays.asList(months).indexOf("Irgend ein Monat");
  7. Bei asList() wird aber ein extra Object auf dem Heap gebastelt, was bei regelmäßigen Aufrufen eher inperformant ist.
    Ich zweifle auch, dass das ohne Schleifen gelöst ist.

    Ich hab mir die Mühe gemacht und mal nachgeschlagen: Es wird in Version 6 zumindest mit einer Schleife gemacht. Deshalb lieber die Methode wechseln. ;-)

    Beitrag zuletzt geändert: 9.12.2011 17:44:59 von reimann
  8. t*****b

    reimann schrieb:
    Ich hab mir die Mühe gemacht und mal nachgeschlagen: Es wird in Version 6 zumindest mit einer Schleife gemacht. Deshalb lieber die Methode wechseln. ;-)


    Rein technisch wird das garnicht anders funktionieren können - egal ob man eine eigene Schleife schreibt oder eine Methode verwendet, die dann eine Schleife dafür verwendet.
  9. trueweb schrieb:
    reimann schrieb:
    Ich hab mir die Mühe gemacht und mal nachgeschlagen: Es wird in Version 6 zumindest mit einer Schleife gemacht. Deshalb lieber die Methode wechseln. ;-)


    Rein technisch wird das garnicht anders funktionieren können - egal ob man eine eigene Schleife schreibt oder eine Methode verwendet, die dann eine Schleife dafür verwendet.


    Ja aber er erstellt aus dem Array erstmal noch eine List, was mindestens die Zeit zum erstellen eines neuen Objektes braucht und da er scheinbar jedesmal noch eine extra Liste erstellt wird das mit der Zeit sehr rechenlastig.
  10. Falls die Frage noch aktuell ist könnte man versuchen eine einfach verkette Liste aus dem Array zu erstellen und diese dann zu durchlaufen. Dies könnte ohne "wirkliche" Schleife passieren.
    class verListElem{
    int Index;
    Inhalt inhalt;
    verListElem next;
    }
    Dann gehen wir vom einen auf das nächste Element verwiesen und so kann man die Liste durch gehen, aber naja vorher die Datenstruktur zuändern und auch die einfachverkettete Liste sind beide nicht sehr effizient.

    Beitrag zuletzt geändert: 30.12.2011 13:58:21 von snix
  11. wtf?! Es ist ja mal sowas von egal, wie man das Array jetzt iteriert, darum geht es doch auch gar nicht.. Der TS sucht einen Suchalgorithmus, welcher nicht alle Elemente linear behandeln muss (Stichwort: http://de.wikipedia.org/wiki/Lineare_Suche). Das ist bei nicht sortierten Arrays aber schlichtweg nicht möglich.
    EDIT:
    Sollte das Array sortiert sein, gibt es folgende Möglichkeiten:
    - http://de.wikipedia.org/wiki/Interpolationssuche
    - http://de.wikipedia.org/wiki/Bin%C3%A4re_Suche

    Beitrag zuletzt geändert: 1.1.2012 19:30:24 von spuglisi
  12. alias-jongleur

    alias-jongleur hat kostenlosen Webspace.

    Eine hilfe hierbei währe vielleicht ein ENUMERATE zu verwenden
    diese haben Werte (getValue, values)

    gut: man kann es bei switch-anweisungen verwenden

    mfg jongleur
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!