Entry API'si ve Varsayılanlar
Değerleri pratik biçimde güncelleyin.
Entry API'si ve Varsayılanlar, CoddyKit'te ücretsiz bir Learn Rust Coding dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Learn Rust Coding öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Learn Rust Coding kursu toplamda 4 dersten oluşur.
Entry API'si Neden Kullanılır?
Çoğu zaman bir anahtar varsa değeri güncellemek, yoksa varsayılan bir değer eklemek istersiniz.
Bunu get ve insert ile yapmak zahmetlidir. entry API'si bu işi tek adımda ve temiz biçimde yapar.
entry Bir Yer Tutucu Döndürür
entry(key) çağrısı, size bu anahtarın haritadaki konumuna ilişkin bir tutamaç verir.
Bu tutamaç üzerinden ne yapacağınıza karar verirsiniz: konumu varsayılan bir değerle doldurabilir veya oradaki değeri değiştirebilirsiniz.
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, i32> = HashMap::new();
m.entry("a").or_insert(0);
println!("{}", m["a"]);
}or_insert
or_insert(default), yalnızca anahtar eksikse varsayılan değeri ekler ve ardından değere değiştirilebilir bir başvuru döndürür.
Anahtar zaten varsa varsayılan değer yok sayılır ve mevcut değeri alırsınız.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("a", 10);
m.entry("a").or_insert(99);
m.entry("b").or_insert(99);
println!("a={}, b={}", m["a"], m["b"]);
}Başvuru Üzerinden Değiştirme
or_insert değiştirilebilir bir başvuru döndürdüğü için değeri hemen değiştirebilirsiniz.
Yerinde güncellemek için * ile başvurunun gösterdiği değere erişin. Saymanın temeli budur.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
let count = m.entry("hits").or_insert(0);
*count += 1;
*count += 1;
println!("hits = {}", m["hits"]);
}Bir Döngüde Sayma
Klasik yaklaşım şudur: her öğe için yerini alın, varsayılanını sıfır yapın ve artırın.
Bu, her öğe için yalnızca bir satırlık mantıkla tekrarları sayar.
use std::collections::HashMap;
fn main() {
let mut counts = HashMap::new();
for c in "hello".chars() {
*counts.entry(c).or_insert(0) += 1;
}
println!("l appears {} times", counts[&'l']);
}or_insert_with
Varsayılan değeri oluşturmak maliyetliyse or_insert_with kullanın. Bu yöntem, yalnızca anahtar eksikse çalıştırılan bir kapanış alır.
Böylece hiç ihtiyaç duymayabileceğiniz bir değeri önceden oluşturmazsınız.
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, Vec<i32>> = HashMap::new();
m.entry("nums").or_insert_with(Vec::new).push(1);
m.entry("nums").or_insert_with(Vec::new).push(2);
println!("{:?}", m["nums"]);
}and_modify
and_modify, yalnızca anahtar zaten varsa değer üzerinde bir kapanış çalıştırır.
Her iki durumu ele almak için bunu or_insert ile zincirleyin: anahtar varsa değiştirin, yoksa başlangıç değeri ekleyin.
use std::collections::HashMap;
fn main() {
let mut m = HashMap::new();
m.insert("x", 5);
m.entry("x").and_modify(|v| *v += 10).or_insert(0);
m.entry("y").and_modify(|v| *v += 10).or_insert(1);
println!("x={}, y={}", m["x"], m["y"]);
}or_default
Değer türünün bir Default uygulaması varsa (0 gibi tam sayılar veya boş bir Vec gibi), or_default bunu kullanır.
Bu, or_insert(Default::default()) ifadesinin kısa biçimidir.
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, i32> = HashMap::new();
*m.entry("score").or_default() += 7;
println!("score = {}", m["score"]);
}Anahtar Başına Listeler Oluşturma
Öğeleri vektörler hâlinde gruplarken entry API'si özellikle kullanışlıdır.
Her anahtar için ilk seferde boş bir Vec varsayılanı kullanın, ardından mevcut vektöre ekleme yapın.
use std::collections::HashMap;
fn main() {
let mut groups: HashMap<bool, Vec<i32>> = HashMap::new();
for n in [1, 2, 3, 4] {
groups.entry(n % 2 == 0).or_default().push(n);
}
println!("evens: {:?}", groups[&true]);
}Neden get + insert Kullanılmamalı?
Ayrı bir get işlemi yapıp ardından insert kullanmak, anahtarı iki kez arar ve ödünç denetleyicisiyle çakışır.
entry API'si tek bir arama yapar ve size tam olarak bir güvenli başvuru sunar; bu nedenle daha hızlı ve daha temizdir.
Bir Araya Getirme
Burada sayma ve varsayılan değer bir araya gelerek her harfle başlayan farklı sözcüklerin kaç tane olduğunu bulur.
Tek satırlık toplam alma kalıbının kullanımına dikkat edin.
use std::collections::HashMap;
fn main() {
let words = ["ant", "art", "bee"];
let mut by_first: HashMap<char, i32> = HashMap::new();
for w in words {
*by_first.entry(w.chars().next().unwrap()).or_insert(0) += 1;
}
println!("a: {}", by_first[&'a']);
}Hızlı Kontrol
Her chars için tek bir aramayla sayım yapmak istiyorsunuz.
Özet
entry API'si, tek bir aramayla ekleme veya güncelleme yapmanızı sağlar.
Öğeleri saymak ve her anahtar için temiz biçimde listeler oluşturmak amacıyla or_insert, or_insert_with, or_default ve and_modify kullandınız.
Sıkça Sorulan Sorular
“Entry API'si ve Varsayılanlar” dersi ücretsiz mi?
Evet — “Entry API'si ve Varsayılanlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Learn Rust Coding kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Learn Rust Coding kursu toplamda 4 dersten oluşur.
“Entry API'si ve Varsayılanlar” dersinde ne öğreneceğim?
Değerleri pratik biçimde güncelleyin. Learn Rust Coding ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Learn Rust Coding öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Learn Rust Coding, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Entry API'si ve Varsayılanlar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Learn Rust Coding dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Learn Rust Coding dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- HashMap Oluşturma
- Entry API'si ve Varsayılanlar
- HashSet ile Çalışma
- Sayma ve Gruplama