Announcement

Collapse
No announcement yet.

array oder Hash?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • array oder Hash?

    hallo an alle hier;
    ich hätte eine Frage,und zwar ich habe zwei tebellen von werten (double werte) die miteinander zusammenhängen; die eine Tabelle enthält werte in der Form:
    0 0 0 0 0 0 2 3 9 8 1 4 5 0 0 0 0 0 0 0 5 4 9 4 8 4 3 0 0 0 0 0 0 5 4 3 2 2 5 0 0 0

    ich hätte gerne die höchste Zahl zwischen der nulls und der index dazu.
    in einer separaten tabelle oder array. nachdem motto:
    1-die liste in ein array pushen
    2-mit eine schleife das array durchlaufen bis die erste zahl kommt
    3-dann vergleiche die zahlen miteinander bis zum nächste null und speichere mir die höchste davon und dazu ihr index
    4- weiter so bis zum nächsten Null und wieder das gleiche
    5 am ende sollte ich haben alle höchstzahlen zwischen den Nulls und ihre Index auch.

    der index benutze ich um auf der anderer tabelle zuzugreifen weil die zusammenhängen.

    ich hoffe ich war klar.
    gruss und besten dank im voraus

  • #2
    Originally posted by berber View Post
    ich hoffe ich war klar.
    Nein, ganz und gar nicht. Deine Erklärungen sind einwandfrei, Dein Vorgehen ist auch klar. Aber was hast Du überhaupt für ein Problem?

    Die einzige Frage, die ich sehe, ist die Überschrift:
    array oder Hash?
    Für solche Listen von double-Werten kann man natürlich ein double-Array oder eine List<double> oder notfalls ArrayList verwenden werden. Aber sonst?
    Hash-Klasse
    Stellt einen Beweis für den Hashwert einer Assembly bereit.

    oder Hashtable-Klasse
    Stellt eine Auflistung von Schlüssel-Wert-Paaren dar, die nach dem Hashcode des Schlüssels organisiert sind.
    Nachtrag: Mir ist gerade noch ein Gedanke gekommen: Geht es Dir darum, was als Ziel-Tabelle (Maximum in jedem Teilbereich und zugehöriger Index) geeignet ist? Es gibt zwar auch noch Dictionary<int, int>, aber nichts davon hilft Dir wirklich. In allen Fällen ist davon auszugehen, dass eine beliebige Zahl in mehreren Blöcken als Maximum vorkommt und dass sie mehrfach vorkommt, also zu einem Maximum mehrere Indizes gehören. Wenn es sich um eine solche Situation handelt, wäre eine eigene Klasse sinnvoll: die Klasse enthält für jeden Block das Maximum und alle Indizes innerhalb des
    Blocks; eine List<T> sammelt alle Instanzen dieser Klasse, nämlich für jeden Block in der Reihenfolge.

    Vielleicht ließe sich Deine eigentliche Aufgabe schneller lösen. Dazu fehlen mir aber Informationen und Verständnis.

    Merke: Genaue Formulierung von Frage und Problem führt schneller und genauer zu nützlicher Antwort.
    Jürgen
    Zuletzt editiert von Jürgen Thomas; 19.03.2008, 20:05. Reason: Nachtrag eingefügt

    Comment


    • #3
      danke erstmal;
      meine frage wäre wie kann ich innerhalb jedes blocks von zahlen die höchste zahl bzw. ihr index ermitteln und angenommen sie sind in ein array gespeichert?
      das programm soll einfach das array durchlaufen ung gucken aha!keine Null mehr dann guck ich bis zum nächsten null nach dem höchste zahl und speichere sie in eine hashtabelle oder so.natürlich dazu ihr Index.usw
      ich hoffe ich war jetzt klar
      gruss

      Comment


      • #4
        Originally posted by berber View Post
        und speichere sie in eine hashtabelle oder so.natürlich dazu ihr Index.usw
        Genau das habe ich doch erläutert: wegen der fehlenden Eindeutigkeit geht es so nicht.

        Also musst Du entweder eine eigene Klasse schreiben, die Wert + Index enthält, und davon List<> benutzen. Oder Du verwendest zwei Listen: List<double> für die Werte und List<int> für die Indizes.

        Für den Arbeitsablauf musst Du doch nur Dein Konzept verwirklichen:
        Originally posted by berber View Post
        das programm soll einfach das array durchlaufen ung gucken aha!keine Null mehr dann guck ich bis zum nächsten null nach dem höchste zahl
        Code:
        //  in Pseudo-Code
        double max = -1;
        int idx = -1;
        //  das programm soll einfach das array durchlaufen
        for-Schleife von 0 bis Ende
           //  bis zum nächsten null
           if (aktuelle Zahl = 0)
              if (idx >= 0)
                 //  letztes Prüfungsergebnis für max und idx in die Liste(n) eintragen
                 werte.Add(max);
                 indizes.Add(idx);
              max = 0;
              idx = -1;
           else   //  aha!keine Null mehr
              //  erster Wert in der neuen Gruppe ist auf jeden Fall max
              if (idx < 0)
                  max = aktuelle Zahl;
                  idx = aktueller Index;
              else
                  if (aktuelle Zahl > max)
                     max = aktuelle Zahl;
                     idx = aktueller Index;
                  end if
              end if
           end if
        end for
        if (idx >= 0)
           letztes Prüfungsergebnis für max und idx in die Liste(n) eintragen
        In so einer Weise kann man sich auch selbst Programmstrukturen erklären und danach umsetzen. Jürgen

        Comment

        Working...
        X