Elixir - Haritalar

Anahtar kelime listeleri, listelerde saklanan içeriği anahtarla ele almanın uygun bir yoludur, ancak bunun altında Elixir hala listede gezinmektedir. Bu liste için hepsinin üzerinden geçmeyi gerektiren başka planlarınız varsa bu uygun olabilir, ancak verilere tek yaklaşımınız olarak anahtarları kullanmayı planlıyorsanız bu gereksiz bir ek yük olabilir.

Haritaların kurtarmaya geldiği yer burasıdır. Bir anahtar-değer deposuna ihtiyacınız olduğunda, haritalar Elixir'deki "git" veri yapısıdır.

Harita Oluşturmak

% {} Sözdizimi kullanılarak bir harita oluşturulur -

map = %{:a => 1, 2 => :b}

Anahtar kelime listelerine kıyasla, şimdiden iki fark görebiliriz -

  • Haritalar, herhangi bir değere anahtar olarak izin verir.
  • Haritaların anahtarları herhangi bir sıralamaya uymaz.

Bir anahtara erişim

Bir anahtarla ilişkili değere erişmek için Haritalar, Anahtar Kelime listeleriyle aynı sözdizimini kullanır -

map = %{:a => 1, 2 => :b}
IO.puts(map[:a])
IO.puts(map[2])

Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu üretir -

1
b

Anahtar eklemek

Haritaya bir anahtar eklemek için, Dict.put_new haritayı, yeni anahtarı ve yeni değeri bağımsız değişken olarak alan işlev -

map = %{:a => 1, 2 => :b}
new_map = Dict.put_new(map, :new_val, "value") 
IO.puts(new_map[:new_val])

Bu, anahtar / değer çiftini ekler :new_val - "value"yeni bir haritada. Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu üretir -

"value"

Bir Değeri Güncelleme

Haritada zaten mevcut olan bir değeri güncellemek için aşağıdaki sözdizimini kullanabilirsiniz -

map = %{:a => 1, 2 => :b}
new_map = %{ map | a: 25}
IO.puts(new_map[:a])

Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu üretir -

25

Desen Eşleştirme

Anahtar kelime listelerinin aksine, haritalar desen eşleştirmede çok kullanışlıdır. Bir modelde bir harita kullanıldığında, her zaman verilen değerin bir alt kümesiyle eşleşecektir -

%{:a => a} = %{:a => 1, 2 => :b}
IO.puts(a)

Yukarıdaki program aşağıdaki sonucu üretir -

1

Bu eşleşecek a ile 1. Ve dolayısıyla çıktıyı şu şekilde üretecektir:1.

Yukarıda gösterildiği gibi, modeldeki anahtarlar verilen haritada bulunduğu sürece bir harita eşleşir. Bu nedenle, boş bir harita tüm haritalarla eşleşir.

Değişkenler harita anahtarlarına erişilirken, eşleştirilirken ve eklenirken kullanılabilir -

n = 1
map = %{n => :one}
%{^n => :one} = %{1 => :one, 2 => :two, 3 => :three}

Harita modülü , haritaları işlemek için kullanışlı fonksiyonlara sahip Anahtar Kelime modülüne çok benzer bir API sağlar. Gibi işlevleri kullanabilirsiniz.Map.get, Map.delete, haritaları işlemek için.

Atom anahtarlı haritalar

Haritalar birkaç ilginç özelliğe sahiptir. Bir haritadaki tüm anahtarlar atom olduğunda, kolaylık sağlamak için anahtar kelime sözdizimini kullanabilirsiniz -

map = %{:a => 1, 2 => :b} 
IO.puts(map.a)

Haritaların bir başka ilginç özelliği de atom anahtarlarını güncellemek ve bunlara erişmek için kendi sözdizimini sağlamalarıdır -

map = %{:a => 1, 2 => :b}
IO.puts(map.a)

Yukarıdaki program aşağıdaki sonucu üretir -

1

Atom anahtarlarına bu şekilde erişmek için var olması gerektiğini veya programın çalışmayacağını unutmayın.