RUBY: Mehrdimensionale Arrays und Objekte

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von marekb, 26.05.2010.

  1. marekb

    marekb Doppel-As

    Dabei seit:
    15.07.2006
    Beiträge:
    121
    Zustimmungen:
    0
    Ort:
    Hamburg
    Hallo erstmal,
    Also ich hab da ein kleines anliegen was mehrdimensionale Arrays in Ruby betrifft:
    Mal angenommen ich schreibe ein 2-Dimensionales Array und fülle es mit Werten wie folgt:

    Code:
    @ary = Array.new(2){Array.new()}
    @ary = [[1,2],["a","b"]]
    
    Wie komme ich dann an diese Werte ohne den Index des Arrays wie etwa mit
    Code:
    @ary[1][1]
    zu benutzen?
    Gibt es da so etwas wie eine bestimmte Suche?

    Desweiteren möchte ich ein Objekt wie etwa einen Namen und eine Adresse
    als Objekt erzeugen.
    Code:
    class Person
      def initialize(name, adresse)
         @name=name
         @adresse=adresse
      end
    ...
    ...
    ...
    
    ...Wie bekomme ich dann den Namen und die Adresse getrennt in das 2 Dimensionale Array?
    Kann ich das Array wie ein Hash benutzen? Dass eine Person der Schlüssel ist und die restlichen Sachen wie etwa Adresse, Tel.Nummer etc die Values?
    An dieser Stelle möchte ich darauf hinweisen dass ich KEIN Hash benutzen möchte.

    Ich hoffe das ist einigermaßen verständlich xD

    Wenn jemand eine Idee hat dann bitte melden.
    Dankeschön.
    Grüße
    M.B.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 slackfan, 27.05.2010
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Hallo,


    ich verstehe deine Fragen nicht, weil Sie für mich zu unkonkret sind. Wo ist das exakte Problem und wieso willst du einen 2-dimensionalen Array erzwingen, wenn er für dich nicht optimal nutzbar ist, was spricht ferner gegen einen Hash?

    Wieso willst du innerhalb des Objektes die Daten unbedingt in den Array zwängen. Damit lässt sich doch nur bescheiden arbeiten. So wie ich das sehe, braucht dein Objekt doch nur eine Methode, die ein 2-dimensionalen Array zurückliefert? Weshalb dafür bei einer Klasse Person Bedarf besteht, muss mir auch erst erklärt werden. Das nur mal, um dich zu reflektieren :)

    Ein einfacher 2-dimensionaler und reichlich nutzloser Array sollte doch so ausschauen?

    Code:
      def ugly_stuff
         return [[@name], [@address]]
      end
    

    cu
     
  4. marekb

    marekb Doppel-As

    Dabei seit:
    15.07.2006
    Beiträge:
    121
    Zustimmungen:
    0
    Ort:
    Hamburg
    Die Klasse "Person" war lediglich als Beispiel gedacht. Ein Hash möchte ich nicht verwenden da es dort keine Dubletten geben darf und man beschränkt auf jeweils ein Key und ein Value ist. Klar kann man Hashes verschachteln nur denke ich die Operationen damit wären wesentlich komplexer und aufwändiger als mit einem Array.

    Ich gebe mal ein anderes, vielleicht etwas verständlicheres Beispiel:

    In einem Spiel gibt es ein Inventar, da kann der Spieler Items ablegen wenn er sie gefunden hat.
    Jedes Item ist ein Objekt und hat einen Namen und ein Gewicht. Namens-Dubletten sollen zusammengezählt werden. Das Gewicht der Gesamten Items soll nachher auch addiert werden um das Gesamtgewicht des Inventars zu ermitteln.
     
  5. #4 ducky_boy, 27.05.2010
    ducky_boy

    ducky_boy Eroberer

    Dabei seit:
    08.06.2009
    Beiträge:
    69
    Zustimmungen:
    0
    Habe gerade nix dabei zum testen, aber was passiert wenn man das Array mit .each ausliest ???
     
  6. marekb

    marekb Doppel-As

    Dabei seit:
    15.07.2006
    Beiträge:
    121
    Zustimmungen:
    0
    Ort:
    Hamburg
    Mit each hast du für jedes Element die Anweisung die im Block steht.
    Bsp:
    Code:
    ary=[["a","b"],[1,2]]
    ary.each do |elem| puts elem end
    #=>a
    #=>b
    #=>1
    #=>2
     
  7. #6 ducky_boy, 27.05.2010
    ducky_boy

    ducky_boy Eroberer

    Dabei seit:
    08.06.2009
    Beiträge:
    69
    Zustimmungen:
    0
    Wieso benötigst du unbedingt das mehrdimensionelle Array??

    Code:
    class Typ
      def initialize(eigenschaft1, eigenschaft2)
         @eig1=eigenschaft1
         @eig2=eigenschaft2
    end
    
    Dann legst du deine Typen an die du brauchst und packst sie in ein Array!

    Code:
    meinTyp1 = Typ.new(1,a)
    meinTyp2 = Typ.new(2,b)
    
    puts meinTyp1.eig1 # => 1
    puts meinTyp1.eig2 # => a
    
    puts meinTyp2.eig1 # => 2
    puts meinTyp2.eig2 # => b
    
    myArray = Array.new(meinTyp1, meinTyp2)
    
    myArray.each do |elem| 
    puts elem.eig1
    puts elem.eig2
    end
    
    #=>1
    #=>a
    #=>2
    #=>b
    
    Oder habe ich deine Frage komplett falsch verstanden? :think:
     
  8. #7 slackfan, 27.05.2010
    Zuletzt bearbeitet: 02.06.2010
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Hallo,


    mein Vorschlag dazu. Notwendigkeit für einen 2-dimensionalen Array sehe ich aber weiterhin nicht. Fehler gehören dir, ist nur heruntergenudelt :p

    PHP:
    #!/usr/bin/env ruby

    class Item
      attr_reader 
    :kind, :name, :weight

      def initialize
    (name='unknown'weight=0)
        @
    kind 'unknown'
        
    @name name
        
    @weight weight
      end

      def to_s
        
    return "I am an item of kind %s with name %s and weight %s." % [@kind, @name, @weight]
      
    end

      def to_a
        
    return [@kind, @name, @weight]
      
    end
    end

    class Honeypot Item
      def initialize
    (*args)
        
    super
        
    @kind 'Honeypot'
      
    end
    end

    class Chicken Item
      def initialize
    (*args)
        
    super
        
    @kind 'Chicken'
      
    end
    end

    class Items
      def initialize
        
    # Nothing special here
        
    @items = []
      
    end

      
    public

      
    def add(item)
        @
    items << item
        
    return true
      end

      def remove
    (item)
        @
    items.delete_at(@items.index(item)) 
      
    end

      def get
        
    return @items
      end

      def get_by_name
    (name=false)
        
    by_name = []
        @
    items.each do |item|
          if 
    name == item.name
            by_name 
    << item
          end
        end
        
    return by_name
      end
    end

    # For debugging purposes only
    if __FILE__ == $0
      itemlist 
    Items.new
      
    a_honeypot Honeypot.new('honeypot_1'5)
      
    b_honeypot Honeypot.new('honeypot_2'7)
      
    a_chicken Chicken.new('chicken_1'1)
      
    itemlist.add(a_honeypot)
      
    itemlist.add(b_honeypot)
      
    itemlist.add(a_chicken)
      
    puts itemlist.get
      itemlist
    .get_by_name('honeypot_1')
      
    itemlist.remove(itemlist.get_by_name('chicken_1')[0])
      
    puts itemlist.get
    end
    cu
     
  9. marekb

    marekb Doppel-As

    Dabei seit:
    15.07.2006
    Beiträge:
    121
    Zustimmungen:
    0
    Ort:
    Hamburg
    Jetzt leuchtet es mir ein. Wie würde man das Gesamtgewicht berechnen können? Wie krieg ich die einzelnen "Gewichte" aus dem Array zusammengezählt?
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 slackfan, 29.05.2010
    Zuletzt bearbeitet: 29.05.2010
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Du könntest die Items-Klasse z.B um folgende Methode erweitern.
    PHP:
      def get_weight_by_name(name=false
        
    weight 0
        
    @items.each do |item
          if 
    name == item.name 
            weight 
    += item.weight
          end 
        end 
        
    return weight
      end
    Edit:

    Vorrausgesetzt, du benutzt meinen Ansatz :P
     
  12. marekb

    marekb Doppel-As

    Dabei seit:
    15.07.2006
    Beiträge:
    121
    Zustimmungen:
    0
    Ort:
    Hamburg
    Jo dankeschön ^^
    Werde es demnächst mal versuchen.
    Vielen Dank
     
Thema: RUBY: Mehrdimensionale Arrays und Objekte
Besucher kamen mit folgenden Suchen
  1. Ruby mehrdimensionale

Die Seite wird geladen...

RUBY: Mehrdimensionale Arrays und Objekte - Ähnliche Themen

  1. Ruby in Version 2.3 erschienen

    Ruby in Version 2.3 erschienen: Die freie Skriptsprache Ruby ist in einer neuen Version verfügbar. Version 2.3.0 bringt nach Angaben der Entwickler viele Neuerungen, darunter ein...
  2. Ruby 2.2.0 einsatzbereit

    Ruby 2.2.0 einsatzbereit: Die Ruby-Entwickler haben ihre freie Skriptsprache in der Version 2.2 freigegeben. Seit der letzten Version kamen mehrere interessante Neuerungen...
  3. Ruby on Rails 4.2 freigegeben

    Ruby on Rails 4.2 freigegeben: Die Rails-Entwickler haben die Version 4.2 des auf Ruby beruhenden Web-Frameworks veröffentlicht. Die neue Version kommt mit nicht allzu vielen...
  4. Ruby on Rails 4.1 freigegeben

    Ruby on Rails 4.1 freigegeben: Die Rails-Entwickler haben die Version 4.1 des auf Ruby beruhenden Web-Frameworks veröffentlicht. Die neue Version kommt mit vielen Neuerungen und...
  5. Ruby on Rails 4.0 freigegeben

    Ruby on Rails 4.0 freigegeben: Die Rails-Entwickler haben die Version 4.0 des auf Ruby beruhenden Web-Frameworks veröffentlicht. Die neue Version kommt mit vielen Neuerungen und...