• Anmelden

1

Mittwoch, 27. Juni 2007, 12:29

Hashs durcheinander

hy ich habe diesen Hash:

Quellcode

1
2
3
4
5
6
7
8
9
Reputation = {
90..100=>"Heroic",
75...90=>"Honored",
55...75=>"Friendly",
45...55=>"Neutral",
25...45=>"Unfriendly",
10...25=>"Hated",
0...10=>"Despised"
}


aber wenn ich Reputation.keys machen kommt das raus:

Quellcode

1
[25...45, 55...75, 45...55, 0...10, 10...25, 75...90, 90..100]


wie kenn ich dafür sorgen, das es richtig bleibt?
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

2

Mittwoch, 27. Juni 2007, 14:30

naja, keys macht in weitesten eher nur das:
h = { "a" => 100, "b" => 200, "c" => 300, "d" => 400 }
h.keys ? ["a", "b", "c", "d"]

also gibt nur ein array aus, welches die schlüssel von hash hat.
ich kenn mich nicht so gut mit hashes aus, nur die grundfuntkionen die man eher braucht oO"

ich mach immer die komplizierteren sachen xD
also so in etwa:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def reputation(key)
  case key
  when 90..100
    string = "Heroic"
  when 75...90
    string = "Honored"
  when 55...75
    string = "Friendly"
  when 45...55
    string = "Neutral"
  when 25...45
    string = "Unfriendly"
  when 10...25
    string = "Hated"
  when 0...10
    string = "Despised"
  end
  return string
end


naja, gibt vor und nachteile.
vorteil ist, das man das script noch mit einigen funktionen ausbauen kann, also sachen hinzufügen...
der nachteil ist halt, das man irgendwo diesen code einbauen muss, lässt sich aber in endeffekt dann auch ganz leicht einfügen mit:
reputation(zahl) ? dann wird der text zurückgegeben...

aufwand, aber naja, des mit hash weis ich auch grad nicht xx

MfG

3

Mittwoch, 27. Juni 2007, 14:31

Prinzipiell erst mal gar nicht. Hashs sind nicht sortiert, das liegt in ihrer Natur. Du könntest in diesem Fall entweder einen Array verwenden, oder den Hash#key-Array im Nachhinein sortieren.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
class Range
  include(Comparable)
  def <=>(other)
    if first > other.first then 1
    elsif first < other.first then -1
    elsif first == other.first then
      if last > other.last then 1 
      elsif last < other.last then -1
      else 0 end
    else 0 end
  end
end

Das einfügen und danach einfach an das Reputation.keys ein sort dranhängen: Reputation.keys.sort

Edit: Marskus' Methode finde ich btw. dennoch sinnvoller, da sie gleich auch das range === zahl in die Methode mit einlagert. Normalerweise bin ich ja auch ein Freund von Konstanten, in diesem Fall aber machst du es dir dadurch nur umständlicher.
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »=Kai=« (27. Juni 2007, 14:40)


4

Mittwoch, 27. Juni 2007, 15:56

ich dacht Hash sind so sortiert wie man sie schreibt...
so kann man sich irren.

es war so wie markusmks hatte, werd es jetz wie =Kai= machen oder vllt auch nicht ganz so.
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

Social Bookmarks