Kontener map
jest typem kontenera zawierającym pary klucz-wartość będące mapowaniem jednej wartości do innej. Podczas tworzenia kontenera mapy jego zawartość jest porządkowana według kolejności par klucz-wartość, a dostęp do elementów zawartych w mapie można uzyskać za pomocą zdefiniowanych unikalnych kluczy.
Aby na przykład zliczać wystąpienia konkretnego słowa, możesz utworzyć mapę, w której to słowo będzie kluczem, a liczba jego wystąpień wartością.
WordCount : [string]int = map{"apple" => 11, "pear" => 7}
Kliknij obraz, aby go powiększyć.
Jeśli podczas inicjacji mapy użyjesz wielokrotnie tego samego klucza, mapa zachowa jedynie ostatnią wartość podaną dla tego klucza. W poniższym przykładzie WordCount
będzie mieć jedynie następującą parę klucz-wartość: "apple" => 2
. Pary "apple" => 0
i "apple" => 1
zostaną odrzucone.
WordCount : [string]int = map{"apple" => 0, "apple" => 1, "apple" => 2}
Obsługiwane typy kluczy
Pary klucz-wartość mogą być dowolnego typu, pod warunkiem że typ klucza jest porównywalny, ponieważ mapa musi mieć możliwość sprawdzenia, czy klucz już istnieje.
W charakterze kluczy można wykorzystać następujące typy:
- Wartość logiczna (logic)
- Liczba całkowita (int)
- Liczba zmiennoprzecinkowa (float)
- Znak (char)
- Ciąg tekstowy (string)
- Wyliczenie (enum)
- Klasa (class), jeśli jest porównywalna
- Opcja (option), jeśli typ elementu jest porównywalny
- Tablica (array), jeśli typ elementu jest porównywalny
- Mapa (map), jeśli zarówno typ klucza, jak i typ wartości są porównywalne
- Krotka (tuple), jeśli wszystkie elementy w krotce są porównywalne
Długość mapy
Liczbę par klucz-wartość w mapie można odczytać z pola Length
mapy. Na przykład map{"a" => "apple", "b" => "bear", "c" => "candy"}.Length
zwraca 3.
Dostęp do elementów w mapie
Dostęp do elementu w mapie można uzyskać za pomocą klucza, na przykład WordCount["apple"]
.
Uzyskiwanie dostępu do elementu w mapie jest wyrażeniem zawodnym i może być stosowane tylko w kontekście niepowodzenia, takim jak wyrażenie if
. Na przykład:
ExampleMap : [string]string = map{"a" => "apple", "b" => "bear", "c" => "candy"}
for (Key->Value : ExampleMap):
Print("{Value} w ExampleMap w kluczu {Key}")
Klucz (Key) | "a" | "b" | "c" |
Wartość (Value) | "apple" | "bear" | "candy" |
Dodawanie i modyfikowanie elementów w mapie
Elementy do zmiennej mapy można dodać, ustawiając dla klucza w mapie konkretną wartość. Na przykład set ExampleMap["d"] = 4
. Istniejące pary klucz-wartość można aktualizować w podobny sposób, przypisując wartość do klucza, który już istnieje w mapie.
Dodawanie elementu do mapy jest wyrażeniem zawodnym i może być stosowane tylko w kontekście niepowodzenia, takim jak wyrażenie if
. Na przykład:
var ExampleMap : [string]int = map{"a" => 1, "b" => 2, "c" => 3}
# Modyfikowanie istniejącego elementu
if (set ExampleMap["b"] = 3, ValueOfB := ExampleMap["b"]):
Print("Zaktualizowany klucz b w ExampleMap do {ValueOfB}")
# Dodawanie nowego elementu
if (set ExampleMap["d"] = 4, ValueOfD := ExampleMap["d"]):
Print("Dodano nową parę klucz-wartość do ExampleMap z wartością {ValueOfD}")
Usuwanie elementów z mapy
Aby usunąć elementy ze zmiennej mapy, trzeba utworzyć nową mapę z wykluczeniem klucza, który ma zostać usunięty. Aby usunąć elementy ze zmiennej mapy, trzeba utworzyć nową mapę z wykluczeniem klucza, który ma zostać usunięty. Poniżej zaprezentowano przykład funkcji, która umożliwia usuwanie z map [string]int
.
# Usuwa element z danej mapy i zwraca nową mapę bez tego elementu
RemoveKeyFromMap(ExampleMap:[string]int, ElementToRemove:string):[string]int=
var NewMap:[string]int = map{}
# Włącz klucze z kontenera ExampleMap do kontenera NewMap, z pominięciem klucza ElementToRemove
for (Key -> Value : ExampleMap, Key <> ElementToRemove):
set NewMap = ConcatenateMaps(NewMap, map{Key => Value})
return NewMap