Loading...
 

Crystal Arrays

Arrays


Arrays sind indexorientierte Variablen.

Array mit vordefinierten Werten erstellen

arr = [1, 3, 8, 2]		# das Array mit dem Bezeichner 'arr' wird befüllt
 
p! arr					# gibt das ganze Array aus
p! arr[0]				# Index 0 gibt das erste Element aus
p! arr[2]


Ausgabe:
arr # => [1, 3, 8, 2]
arr[0] # => 1
arr[2] # => 8

to_a

Man kann auch die Funktion 'to_a' verwenden.

arr = {3, 5, 2, 1}.to_a

p! arr

Ausgabe:
arr # => [3, 5, 2, 1]

Neues Element anhängen:

arr = [1, 3, 8, 2]
p! arr

arr << 7		# mit '<<' wird ein neues Element angehängt
p! arr

Array anlegen

Wenn man ein leeres Array anlegt, muss man dem Compiler mitteilen, welchen Typ man speichern möchte. Im Beispiel wollen wir Int16 speichern.

# leeres Array anlegen
arr_lang = Array(Int16).new 
arr_lang << 17
p! arr_lang

# Kurzform
arr_kurz = [] of Int16 
arr_kurz << 23
p! arr_kurz


Ausgabe:
arr_kurz # => [23]
arr_lang # => [17]

Array anlegen und mit einer bestimmten Anzahl von Werten befüllen.

Die Zahl 3 in den runden Klammern bedeutet, dass der Funktionsblock in den geschweiften Klammer 3 mal ausgeführt werden soll. Dabei wird die Variable 'xi' an die Funktion, die das Array erstellt übergeben. (siehe auch Blocks und yield)

arr = Array.new(3) {|xi| xi + 1}
 
p! arr


Ausgabe:
arr # => [1, 2, 3]

Mehrdimensionale Arrays

Mehrdimensionale Array sind Arrays, die in anderesn Arrays verschachtelt sind. Im Beispiel wird ein 2 x 3 großes Array anglegt und mit 0 befüllt.
Die 3 in den runden Klammen bedeutet, dass die Angaben in den ersten geschweiften Klammern 3 mal ausgeführt werden sollen. Gleiches gilt für die {0}, welche 2 mal für das innere Array ausgeführt wird.

arr = Array.new(3) {Array.new(2) {0}}
p! arr
arr[1][0] = 33
p! arr


Ausgabe:
arr # => [[0, 0], [0, 0], [0, 0]]
arr # => [[0, 0], [33, 0], [0, 0]]

Mehrdimensionales Array mit verschiedenen Typen

Es wird ein 2 dimensionales Array angelet und mit 0 vorbefüllt. Es dürfen sowohl Strings, unsigned Intergers und Floats gespeichert werden.

arr = Array.new(3) {Array(String | UInt32 | Float32).new(6) {0_u32}}

# bei der Wertezuweisung muss der Typ angegeben werden
arr[0][0] = 42_u32
arr[0][1] = 0.22
arr[1][0] = "Test"

p! arr[0]
p! arr[1]


Ausgabe:
arr[0] # => [42, 0.22, 0, 0, 0, 0]
arr[1] # => ["Test", 0, 0, 0, 0, 0]

%w

Besonderheit für Array aus Strings. Über die Angabe von '%w' können Arrays mit Strings ohne großartiges Getippe angelegt werden.
Alle 5 Beispiele sind genau gleichwertig. Sie unterscheiden sich nur bei der Anlage durch die unterschiedlichen Trennzeichen (Delimiter).
Erlaubt sind: (), [], {}, <>, ||

arr = %w(null eins zwei drei)
p! arr
p! arr[2]

arr = %w[null eins zwei drei]
p! arr
p! arr[1]

arr = %w{null eins zwei drei}
p! arr
p! arr[3]

arr = %w<null eins zwei drei>
p! arr
p! arr[0]

arr = %w|null eins zwei drei|
p! arr
p! arr[2]

size

Mit der Methode 'size' erhält man die Anzahl der Elemente von einem Array.

arr = %w(null eins zwei drei)
p! arr.size


Ausgabe:
arr.size # => 4

max und min

Die Methoden 'max' und 'min' liefern jeweils den größten und kleinsten Wert in einem Array.

arr = [1, 3, 4, 2]
 
p! arr.max
p! arr.min


Ausgabe:
arr.max # => 4
arr.min # => 1

sort

Die Methode 'sort' erstellt ein neues sortiertes Array.

# array anlegen
arr = [3, 5, 18, 39, 1, 34, 99]
 
# sort legt ein neues array
sortiert = arr.sort
 
# niedrigsten und höchsten wert ermitteln
kleinster_wert = arr.sort[0]
hoechster_wert = arr.sort[-1]
 
p! sortiert
p! kleinster_wert
p! hoechster_wert


Ausgabe:
sortiert # => [1, 3, 5, 18, 34, 39, 99]
kleinster_wert # => 1
hoechster_wert # => 99

clone

Mit 'clone' wird ein komplettes Array geklont bzw. in ein neues kopiert.

# Array anlegen
arr = [3, 5, 18, 39, 1, 34, 99]

# Array klonen bzw kopieren
arr_doppelt = arr.clone

# zum Test einen Wert ändern
arr_doppelt[1] = 398

p! arr
p! arr_doppelt


Ausgabe:
arr # => [3, 5, 18, 39, 1, 34, 99]
arr_doppelt # => [3, 398, 18, 39, 1, 34, 99]

in?

Auf vorhandenen Wert im Array prüfen.

# array anlegen
arr = [1, 2, 5, 9]

# Abfrage, ob 3 im Array ist
if 3.in?(arr)
  puts "3 ist im array"
else
  puts "3 ist nicht im array"
end

# geht auch mit Variablen
test = 5

if test.in?(arr)
  puts "#{test} ist im array"
else
  puts "#{test} ist nicht im array"
end

# geht auch mit einema anderen Array
test = [1, 4]

test.each do |i|
  if  i.in?(arr)
    puts "#{i} ist im array"
  else
    puts "#{i} ist nicht im array"
  end
end


Ausgabe:
3 ist nicht im array
5 ist im array
1 ist im array
4 ist nicht im array

clear

Inhalt von einem Array komplett löschen:

# Array befüllen
arr = [3, 5, 18, 39, 1, 34, 99]
p! arr

# Array löschen
arr.clear
p! arr


Ausgabe:
arr # => [3, 5, 18, 39, 1, 34, 99]
arr # => []