İksir - Anahtar kelime listeleri

Şimdiye kadar, herhangi bir ilişkilendirilebilir veri yapısını, yani belirli bir değeri (veya birden çok değeri) bir anahtarla ilişkilendirebilen veri yapılarını tartışmadık. Farklı diller bu özellikleri sözlükler, karmalar, ilişkilendirilebilir diziler vb. Gibi farklı adlarla adlandırır.

Elixir'de iki ana ilişkilendirilebilir veri yapımız vardır: anahtar kelime listeleri ve haritalar. Bu bölümde, Anahtar Kelime listelerine odaklanacağız.

Pek çok işlevsel programlama dilinde, bir ilişkisel veri yapısının temsili olarak 2 maddelik demetlerin bir listesini kullanmak yaygındır. Elixir'de, tuple listemiz olduğunda ve tuple'ın ilk öğesi (yani anahtar) bir atom olduğunda, ona anahtar kelime listesi diyoruz. Aynısını anlamak için aşağıdaki örneği düşünün -

list = [{:a, 1}, {:b, 2}]

Elixir, bu tür listeleri tanımlamak için özel bir sözdizimini destekler. Kolonu her atomun sonuna yerleştirebilir ve tuple'lerden tamamen kurtulabiliriz. Örneğin,

list_1 = [{:a, 1}, {:b, 2}]
list_2 = [a: 1, b: 2]
IO.puts(list_1 == list_2)

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

true

Bunların her ikisi de bir anahtar kelime listesini temsil eder. Anahtar kelime listeleri aynı zamanda liste olduğu için listelerde kullandığımız tüm işlemleri üzerlerinde kullanabiliriz.

Anahtar kelime listesindeki bir atomla ilişkili değeri almak için, atomu listenin adından sonra [] olarak iletin -

list = [a: 1, b: 2]
IO.puts(list[:a])

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

1

Anahtar kelime listelerinin üç özel özelliği vardır -

  • Anahtarlar atom olmalıdır.
  • Anahtarlar, geliştirici tarafından belirtildiği gibi sıralanır.
  • Anahtarlar birden fazla verilebilir.

Elixir, anahtar kelime listelerini değiştirmek için Anahtar Kelime modülünü sağlar . Bununla birlikte, anahtar kelime listelerinin basit bir liste olduğunu ve bu nedenle listelerle aynı doğrusal performans özelliklerini sağladıklarını unutmayın. Liste ne kadar uzun olursa, anahtar bulmak, öğe sayısını saymak vb. O kadar uzun sürecektir. Bu nedenle Elixir'de anahtar kelime listeleri esas olarak seçenek olarak kullanılır. Çok sayıda öğeyi depolamanız veya tek anahtarlı ortaklara maksimum tek değer garantisi vermeniz gerekiyorsa, bunun yerine haritaları kullanmalısınız.

Bir anahtara erişim

Belirli bir anahtarla ilişkili değerlere erişmek için, Keyword.getişlevi. Verilen anahtarla ilişkili ilk değeri döndürür. Tüm değerleri almak için Keyword.get_values ​​fonksiyonunu kullanıyoruz. Örneğin -

kl = [a: 1, a: 2, b: 3] 
IO.puts(Keyword.get(kl, :a)) 
IO.puts(Keyword.get_values(kl))

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

1
[1, 2]

Anahtar eklemek

Yeni bir değer eklemek için kullanın Keyword.put_new. Anahtar zaten varsa, değeri değişmeden kalır -

kl = [a: 1, a: 2, b: 3]
kl_new = Keyword.put_new(kl, :c, 5)
IO.puts(Keyword.get(kl_new, :c))

Yukarıdaki program çalıştırıldığında, ek anahtar, c ile yeni bir Anahtar Kelime listesi oluşturur ve aşağıdaki sonucu oluşturur -

5

Bir anahtarı silme

Bir anahtar için tüm girişleri silmek isterseniz, Keyword.delete; bir anahtar için yalnızca ilk girişi silmek için Keyword.delete_first.

kl = [a: 1, a: 2, b: 3, c: 0]
kl = Keyword.delete_first(kl, :b)
kl = Keyword.delete(kl, :a)

IO.puts(Keyword.get(kl, :a))
IO.puts(Keyword.get(kl, :b))
IO.puts(Keyword.get(kl, :c))

Bu ilkini silecek b Listede ve tüm alistede. Yukarıdaki program çalıştırıldığında, aşağıdaki sonucu üretecektir -

0