homeUnix & Internet Unix & Shell-Programmierung: Listen und Operationen auf Listen Prof. Dr. Uwe Schmidt FH Wedel

Listen und Operationen auf Listen

weiter

weiter

Der Datentyp array

array
ist die eingebaute Ruby Klasse für Felder.
 
Diese Felder sind flexibler als Felder in den Sprachen C und Java.
Ruby Felder sind besser vergleichbar mit Listen aus LISP, Tcl oder Haskell.
Literale
für Listen
 
[]
[1, 2, 3]
["abc""xyz""123"]
[nil, 1, "abc", [], ["x""y"]]
 
%w{abc xyz 123}
weiter
Erzeugung
von Listen
 
Array.new               # => []
Array.new(2)            # => [nil, nil]
Array.new(2,42)         # => [42, 42]
merke
In dem letzten Beispiel wird die Referenz auf das für die Intitalisierung verwendete Objekt in jede Zelle des Feldes eingetragen.
Es wird keine Kopie der Objekte angelegt.
merke
==> keine referenzielle Transparenz.
weiter
Indizierter Zugriff
auf Listenelemente
Lesende Zugriffe
a = [5, 6, 7]
 
a[0]                    # => 5
a[2]                    # => 7
a[3]                    # => nil
 
a[-1]                   # => 7
a[-3]                   # => 5
a[-4]                   # => nil
 
a[0..1]                 # => [5, 6]
a[1..3]                 # => [6, 7]
a[3..1]                 # => []
 
a[-3..-1]               # => [5, 6, 7]
a[-1..-3]               # => []
merke
a[i] ist ein Alias für a.slice(i)
merke
a.first entspricht a[0]
merke
a.last entspricht a[-1]
Schreibende Zugriffe
a = [5, 6, 7]
 
a[0]=1  ; a              # => [1, 6, 7]
a[3]=42 ; a              # => [1, 6, 7, 42]
a[6]=43 ; a              # => [1, 6, 7, 42,
                         #     nil, nil, 43]
 
                  a[3]   # => 42
a[1..2]=[2,3,4] ; a      # => [1,
                         #     2, 3, 4,
                         #     42, nil, nil, 43
                         #    ]
                  a[3]   # => 4
 
a[1..2]=[]      ; a      # => [1, 4, 42,
                         #     nil, nil, 43]
 
a[0..0]=[]      ; a      # => [4, 42,
                         #     nil, nil, 43]
merke
a.shift entspricht a[0..0]=[]
merke
a.pop entspricht a[-1..-1]=[]
weiter
Weitere Operationen
auf Listen
 
a = [4, 1, 2]
 
a.length                 # => 3
a.size                   # => 3
 
a.min                    # => 1
a.max                    # => 4
 
b = ["a","b","c"]
b.max                    # => "c"
 
c = [1,2,3,"a","b","c"]
c.max                    # ???
 
a.sort                   # => [1, 2, 4]
a                        # => [4, 1, 2]
 
b.sort                   # ???
c.sort                   # ???
 
a.sort!                  # => [1, 2, 4]
a                        # => [1, 2, 4]
 
a.reverse                # => [4, 2, 1]
 
a = [4, 1, 2]
a[a.length] = 3 ; a      # => [4, 1, 2, 3]
 
a = [4, 1, 2]
a << 3                   # => [4, 1, 2, 3]
 
a = [4, 1, 2]
a[a.length..a.length] = [3, 7, 9]
a                        # => [4, 1, 2,
                         #     3, 7, 9]
 
a = [4, 1, 2]
a = a + [3, 7, 9]        # => [4, 1, 2,
                         #     3, 7, 9]
weiter
Suchen
in Listen
 
a = ["abc""xyz""zzz"]
 
a.index("zzz")          # => 2
a.index("123")          # => nil
a.index(a.max)          # => 2
 
a.grep(/a/)             # => ["abc"]
a.grep(/z/)             # => ["xyz", "zzz"]
a.grep(/^z/)            # => ["zzz"]
merke
Es gibt eine Reihe weiterer Suchfunktionen, die mit Blöcken arbeiten.
weiter
Mengenoperationen
auf Listen
 
a = [1, 2, 3, 1]
b = [3, 4, 5]
 
a.uniq                  # => [1, 2, 3]
a                       # => [1, 2, 3, 1]
 
a.uniq!                 # => [1, 2, 3]
a                       # => [1, 2, 3]
 
a.uniq!                 # => nil
a                       # => [1, 2, 3]
 
a - b                   # => [1, 2]
b - a                   # => [4, 5]
 
a + b                   # => [1, 2, 3, 3, 4, 5]
b + a                   # => [3, 4, 5, 1, 2, 3]
 
(a + b).uniq            # => [1, 2, 3, 4, 5]
(b + a).uniq            # => [3, 4, 5, 1, 2]
 
(a - b) + (b - a)       # => [1, 2, 4, 5]
 
(a + b) - ((a - b) + (b - a))
                        # => [3, 3]
 
((a + b) - ((a - b) + (b - a))).uniq
                        # => [3]
 
weiter

Letzte Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel