Kurz: array hat feste Länge, seq wächst dynamisch:
Teil des Kurses Nim
Arrays und Sequenzen
array hat feste Länge, seq wächst dynamisch:
import std/[sequtils, algorithm, sugar]
var a: array[5, int] = [5, 3, 9, 1, 7]
echo a, " ", a.len, " ", a[0], " ", a[^1]
a[0] = 50
echo a.sorted()
var s = @[5, 3, 9, 1, 7]
s.add(11)
s.insert(100, 0)
echo s
echo s.len, " ", s[1], " ", s[^1], " ", s[1..3], " ", s[1 ..< 3]
echo s.pop()
s.delete(0)
echo s
echo s.sorted()
echo s.sorted(Descending)
echo s.reversed()
echo s.map(x => x * 2)
echo s.filter(x => x > 4)
echo s.foldl(a + b)
echo s.mapIt(it * it)
echo s.filterIt(it mod 2 == 1)
echo s.anyIt(it > 8), " ", s.allIt(it > 0)
echo s.count(3), " ", s.find(9), " ", 9 in s, " ", 99 notin s
echo s.minIndex, " ", s.maxIndex
echo s.zip(@["a", "b", "c", "d", "e"])
echo toSeq(1..5)
echo newSeq[int](3)
echo repeat(7, 3)
echo concat(@[1, 2], @[3])
echo deduplicate(@[1, 2, 2, 3, 3, 3])
echo @[1, 2, 3, 4, 5, 6].distribute(3)
echo (@[1, 2, 3] & @[4])
echo s.mapIt($it).foldl(a & "-" & b)Ausgabe:
[5, 3, 9, 1, 7] 5 5 7
@[1, 3, 7, 9, 50]
@[100, 5, 3, 9, 1, 7, 11]
7 5 11 @[5, 3, 9] @[5, 3]
11
@[5, 3, 9, 1, 7]
@[1, 3, 5, 7, 9]
@[9, 7, 5, 3, 1]
@[7, 1, 9, 3, 5]
@[10, 6, 18, 2, 14]
@[5, 9, 7]
25
@[25, 9, 81, 1, 49]
@[5, 3, 9, 1, 7]
true true
1 2 true true
3 2
@[(5, "a"), (3, "b"), (9, "c"), (1, "d"), (7, "e")]
@[1, 2, 3, 4, 5]
@[0, 0, 0]
@[7, 7, 7]
@[1, 2, 3]
@[1, 2, 3]
@[@[1, 2], @[3, 4], @[5, 6]]
@[1, 2, 3, 4]
5-3-9-1-7Tupel
let person = (name: "Mia", alter: 17)
echo person
echo person.name, " ", person.alter
let (n, a) = person
echo n, " ", a
let punkt = (3, 4)
echo punkt[0] + punkt[1]
var t = (1, "eins", 3.5)
t[0] = 10
echo t
proc teile(a, b: int): (int, int) = (a div b, a mod b)
let (q, r) = teile(17, 5)
echo q, " ", rAusgabe:
(name: "Mia", alter: 17)
Mia 17
Mia 17
7
(10, "eins", 3.5)
3 2Tabellen (Hash-Maps)
import std/[tables, sequtils, algorithm]
var alter = {"Mia": 17, "Tom": 25, "Zoe": 31}.toTable
alter["Ben"] = 12
echo alter["Mia"], " ", alter.len, " ", "Tom" in alter
echo alter.getOrDefault("Max", 0)
alter.del("Ben")
for name in alter.keys.toSeq.sorted:
echo name, " = ", alter[name]
var zaehler = initCountTable[char]()
for c in "mississippi":
zaehler.inc(c)
echo zaehler.largest
for k in zaehler.keys.toSeq.sorted:
stdout.write k, ":", zaehler[k], " "
echo ""
var gruppen = initTable[int, seq[string]]()
for w in ["ein", "kleiner", "langer", "satz", "mit", "drei"]:
gruppen.mgetOrPut(w.len, @[]).add(w)
for k in gruppen.keys.toSeq.sorted:
echo k, ": ", gruppen[k]
let ordered = {"b": 2, "a": 1}.toOrderedTable
echo orderedAusgabe:
17 4 true
0
Mia = 17
Tom = 25
Zoe = 31
(key: 'i', val: 4)
i:4 m:1 p:2 s:4
3: @["ein", "mit"]
4: @["satz", "drei"]
6: @["langer"]
7: @["kleiner"]
{"b": 2, "a": 1}Mit toSeq und sortedByIt holt man Schlüssel, Werte und Paare in sortierter Form:
import std/[tables, sequtils, algorithm]
let t = {"b": 2, "a": 1, "c": 3}.toTable
echo t.keys.toSeq.sorted
echo t.values.toSeq.sorted
echo t.pairs.toSeq.sortedByIt(it[1])Ausgabe:
@["a", "b", "c"]
@[1, 2, 3]
@[("a", 1), ("b", 2), ("c", 3)]Mengen und Aufzählungen
import std/sets
var s = toHashSet([3, 1, 2, 3, 1])
s.incl(9)
s.excl(1)
echo s.len, " ", 3 in s, " ", 1 in s
echo (s + toHashSet([7])).len
echo (s * toHashSet([2, 9, 100])).len
echo toHashSet([1, 2]) < toHashSet([1, 2, 3])
type Wochentag = enum Mo, Di, Mi, Do, Fr, Sa, So
let werktage: set[Wochentag] = {Mo..Fr}
echo Mi in werktage, " ", Sa in werktage
echo Fr.ord, " ", succ(Mo), " ", pred(Fr), " ", $So
for tag in Mo..Mi:
stdout.write tag, " "
echo ""
echo {'a'..'e'}Ausgabe:
3 true false
4
2
true
true false
4 Di Do So
Mo Di Mi
{'a', 'b', 'c', 'd', 'e'}Merke
array(fest),seq(dynamisch,@[...]),Table,HashSet,set[...]und Tupelsequtilsundsugarliefernmap,filter,foldl,mapIt,filterIt- Indizes:
a[^1]zählt vom Ende,a[1..3]ist ein Ausschnitt Table/CountTablefür Zuordnungen,toTable,getOrDefault,mgetOrPut
Übungsaufgabe
Zähle mit einer CountTable die Wörter eines Satzes.
Quiz zur Selbstkontrolle
Wie schreibt man eine Sequenz?
- @[1, 2, 3] (richtig)
- [1, 2, 3]
- seq(1,2,3)
- {1, 2, 3}
?
- Das letzte Element (richtig)
- Das erste Element
- Potenz
- Fehler
Was macht mapIt(it * it)?
- Wendet einen Ausdruck auf jedes Element an (richtig)
- Sortiert
- Löscht
- Verbindet
Weiter im Kurs
Zurück: Kontrollfluss und Prozeduren
Weiter: Objekte, Vererbung und Generics
Alle Kapitel: Nim im Überblick