ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 08 Jun 2011, 15:46 
Offline
Lehrling

Registriert: 22 Mär 2011, 18:38
Beiträge: 62
Hi zusammen,

wie das Thema schon verrät versuche ich aus einem Set zufällig ein Element auszuwählen. Da die Klasse Set keine random Methode besitzt, hatte ich mir überlegt alle Elemente aus dem Set in ein Array zu transportieren, aus der Arraylänge eine Zufallzahl zu generieren und anhand dieser dann ein Element aus dem Array auszuwählen. In etwa so in der Art...

zahl = array.length
r = Random.new(zahl)
r.rand(0...zahl)
result = array[r[0]]

Jetzt merke ich aber gerade, das Ruby1.8 ja nicht einmal die Klasse Random besitzt... Was habe ich da jetzt für Optionen?


Beste Grüße!


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jun 2011, 15:55 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 682
Wohnort: Aachen, NRW
Wie wär's mit Kernel.rand(x) ?

_________________
-


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jun 2011, 16:03 
Offline
Lehrling

Registriert: 22 Mär 2011, 18:38
Beiträge: 62
Hi, besten Dank, das geht wohl! Nur mal kurz fürs Verständnis, Kernel jetzt was für eine Klasse?


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jun 2011, 16:06 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1821
Wohnort: NRW → UN
Mole23 hat geschrieben:
Hi, besten Dank, das geht wohl! Nur mal kurz fürs Verständnis, Kernel jetzt was für eine Klasse?

Kernel ist keine Klasse, sondern ein Modul. Und da Kernel via #include direkt in Rubys Hauptklasse Object eingemischt wird, kannst du seine Methoden direkt ohne jeglichen Receiver verwenden[1]:

1
2
puts rand(10)
puts Kernel.rand(10)
bewirkt beides das gleiche.

Noch der Vollständigkeit halber: Ab Ruby 1.9 gibt es Array#sample, das ein zufälliges Element des Arrays zurückgibt:

1
2
3
4
5
6
7
8
9
10
#ruby -v: ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
irb(main):001:0> ary = [1, 2, 3, 4, 5]
=> [1, 2, 3, 4, 5]
irb(main):002:0> ary.sample
=> 3
irb(main):003:0> ary.sample
=> 5
irb(main):004:0> ary.sample
=> 1
irb(main):005:0>


Vale,
Quintus

[1] OK, da gibt's noch die Sache mit BasicObject, aber die ist hier vermutlich fehl am Platze.

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation auf meiner Website.

Mein Blog | GitHub-Profil | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F BCC8 BC4F


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jun 2011, 16:07 
Offline
Interpreter
Benutzeravatar

Registriert: 03 Jul 2006, 14:53
Beiträge: 4872
Wohnort: RLP
Kernel ist das Modul, das in allen Objekten eingemixt ist und die wichtigsten Methoden anbietet, z.B. #rand, #srand, #system, #`` (ja, die quotes sind eine Methode).

Für alle praktischen Anwendungen sind Methoden in Kernel global.

Gruß,
Skade


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jun 2011, 16:10 
Offline
Lehrling

Registriert: 22 Mär 2011, 18:38
Beiträge: 62
Alles klar! Das ist natürlich sehr hilfreich! Besten Dank euch beiden!


Nach oben
 Profil  
 
BeitragVerfasst: 08 Jun 2011, 22:16 
Offline
Lehrling

Registriert: 25 Mai 2009, 12:48
Beiträge: 91
Wohnort: Berlin
Vollständigkeit Part 2: In 1.8.7 gibt's anstatt Array#sample, Array#choice

_________________
fresh / irbtools / ripltools / github / J-_-L


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: