Harita, bir değerden başka bir değere eşleştirmeler olan anahtar-değer çiftlerini içeren bir kapsayıcı türüdür. Bir haritadaki öğeler, haritayı oluşturduğun andaki anahtar-değer çiftlerinin sırasına göre düzenlenir ve haritadaki öğelere tanımladığın benzersiz anahtarları kullanarak erişebilirsin.
Örneğin, bir sözcükle kaç kez karşılaştığının kaydını tutmak istersen sözcüğü anahtar, sayısını ise değer olarak kullanarak bir harita oluşturabilirsin.
WordCount : [string]int = map{"apple" => 11, "pear" => 7}Büyütmek için resme tıkla.
Bir haritayı başlatırken aynı anahtarı birden çok kez kullanırsan harita yalnızca o anahtar için sağlanan son değeri tutacaktır. Aşağıdaki örnekte, WordCount yalnızca "apple" => 2 anahtar-değer çiftine sahip olur. "apple" => 0 ve "apple" => 1 çiftleri atılır.
WordCount : [string]int = map{"apple" => 0, "apple" => 1, "apple" => 2}Desteklenen Anahtar Türleri
Anahtar türü karşılaştırılabilir olduğu sürece anahtar-değer çiftleri, herhangi bir türde olabilir, çünkü bir harita için bir anahtarın zaten var olup olmadığını kontrol etmenin bir yolu olması gerekir.
Aşağıdaki türler anahtar olarak kullanılabilir:
Karşılaştırılabilirse sınıftır
Öğe türü karşılaştırılabilirse seçenektir
Öğe türü karşılaştırılabilirse dizidir
Anahtar ve değer türlerinin her ikisi de karşılaştırılabilirse haritadır
Demetteki tüm öğeler karşılaştırılabilirse demettir
Harita Uzunluğu
Harita üzerindeki Uzunluk alanına erişerek bir haritadaki anahtar-değer çiftlerinin sayısını elde edebilirsin. Örneğin, map{"a" => "apple", "b" => "bear", "c" => "candy"}.Length 3 değerini döndürür.
Haritadaki Öğelere Erişim
Haritadaki bir öğeye bir anahtar kullanarak erişebilirsin (örneğin WordCount["apple"].
Haritadaki bir öğeye erişmek, başarısız olabilir bir ifadedir ve yalnızca if ifadesi gibi bir başarısızlık bağlamında kullanılabilir. Örneğin:
ExampleMap : [string]string = map{"a" => "apple", "b" => "bear", "c" => "candy"}
for (Key->Value : ExampleMap):
Print("{Value} in ExampleMap at key {Key}")Anahtar | "a" | "b" | "c" |
Değer | "apple" | "bear" | "candy" |
Haritaya Öğe Ekleme ve Haritadaki Öğeleri Değiştirme
Bir haritadaki anahtarı belirli bir değere ayarlayarak bir harita değişkenine öğeler ekleyebilirsin. Örneğin ExampleMap["d"] = 4 olarak ayarlayın. Mevcut anahtar-değer çiftleri, haritada zaten mevcut olan bir anahtara benzer şekilde değer atanarak güncellenebilir.
Bir haritaya öğe eklemek başarısız olabilir ifadedir ve yalnızca if ifadesi gibi bir başarısızlık bağlamında kullanılabilir. Örneğin:
var ExampleMap : [string]int = map{"a" => 1, "b" => 2, "c" => 3}
# Modifying an existing element
if (set ExampleMap["b"] = 3, ValueOfB := ExampleMap["b"]):
Print("Updated key b in ExampleMap to {ValueOfB}")
# Adding a new element
if (set ExampleMap["d"] = 4, ValueOfD := ExampleMap["d"]):
Print("Added a new key-value pair to ExampleMap with value {ValueOfD}")Haritadan Öğeleri Kaldırma
Kaldırmak istediğin anahtarı içermeyen yeni bir harita oluşturarak bir harita değişkeninden öğeleri kaldırabilirsin. Aşağıda, [string]int haritalarından öğe kaldırmayı sağlayan bir fonksiyon örneği verilmektedir.
# Removes an element from the given map and returns a new map without that element
RemoveKeyFromMap(ExampleMap:[string]int, ElementToRemove:string):[string]int=
var NewMap:[string]int = map{}
# Concatenate Keys from ExampleMap into NewMap, excluding ElementToRemove
for (Key -> Value : ExampleMap, Key <> ElementToRemove):
set NewMap = ConcatenateMaps(NewMap, map{Key => Value})
return NewMapZayıf Harita
weak_map türü, harita türünün bir üst türüdür. Bir weak_map türünü, aşağıdaki istisnalar hariç çoğu durumda harita türünü kullandığın gibi kullanırsın:
weak_mapbirLengthüyesi içermediğinden birweak_maptürünün kaç öğe içerdiğini sorgulayamazsın.weak_mapöğeleri aracılığıyla yineleyemezsin.Bir
weak_mapüzerindeConcatenateMaps()kullanamazsın.
Başka bir fark ise bir weak_map tür tanımı için weak_map fonksiyonunu kullanan anahtar-değer çiftlerini tanımlaman gerekir. Örneğin, MyWeakMap:weak_map(string, int) = map{}, bir tamsayı değeriyle eşlenmiş bir dize anahtarına sahip olan MyWeakMap adlı zayıf haritayı tanımlar. weak_map bir harita üst türü olduğundan standart bir map{} ile başlatılabilir.
Aşağıda bir weak_map değişkeni oluşturma ve zayıf haritadaki bir öğeye erişme örneği verilmektedir:
ExampleFunction():void=
var MyWeakMap:weak_map(int, int) = map{} # Supertype of the standard map, so it can be assigned from the standard map
if:
set MyWeakMap[0] = 1 # Same means of mutation of a particular element as the standard map
then:
if (Value := MyWeakMap[0]):
Print("Value of map at key 0 is {Value}")
set MyWeakMap = map{0 => 2} # Same means of mutation of the entire map as the standard mapKalıcı Tür
Bir harita, hem anahtar hem de değer türleri kalıcıysa kalıcıdır. Bir haritanın kalıcı olması, onu modül kapsamındaki weak_map değişkenlerinde kullanabileceğin ve değerinin oyun oturumları arasında kalıcı olmasını sağlayabileceğin anlamına gelir. Verse’te süreklilik hakkında daha ayrıntılı bilgi için Verse’te Kalıcı Veri Kullanımı bölümüne bakabilirsin.