Entry API y valores predeterminados
Actualice valores de forma sencilla
Entry API y valores predeterminados es una lección gratuita de Learn Rust Coding en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Learn Rust Coding, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Por qué usar la API Entry?
A menudo querrá actualizar un valor si existe una clave o insertar un valor predeterminado si no existe.
Hacerlo con get y después insert resulta poco práctico. La API entry lo hace de forma sencilla en un solo paso.
entry devuelve una posición
Al llamar a entry(key), obtiene un controlador para la posición de esa clave en el mapa.
A partir de ese controlador, decide qué hacer: rellenarlo con un valor predeterminado o modificar lo que ya contiene.
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) inserta el valor predeterminado solo si falta la clave y después devuelve una referencia mutable al valor.
Si la clave ya existe, se ignora el valor predeterminado y obtiene el valor existente.
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"]);
}Modificar mediante la referencia
Como or_insert devuelve una referencia mutable, puede cambiar el valor inmediatamente.
Quite la referencia con * para actualizar el valor en su lugar. Este es el fundamento del recuento.
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"]);
}Contar en un bucle
El patrón clásico: para cada elemento, obtiene su posición, establece cero como valor predeterminado y lo incrementa.
Así puede contabilizar las apariciones con una sola línea lógica por elemento.
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
Cuando resulta costoso construir el valor predeterminado, use or_insert_with. Recibe un cierre que solo se ejecuta si falta la clave.
Así evita construir un valor que quizá nunca necesite.
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 ejecuta un cierre sobre el valor solo si la clave ya existe.
Encadénelo con or_insert para gestionar ambos casos: modificar si está presente o insertar un valor inicial si no lo está.
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
Si el tipo del valor tiene un Default, como 0 para los enteros o un Vec vacío, or_default lo utiliza.
Es una forma abreviada de or_insert(Default::default()).
use std::collections::HashMap;
fn main() {
let mut m: HashMap<&str, i32> = HashMap::new();
*m.entry("score").or_default() += 7;
println!("score = {}", m["score"]);
}Crear listas por clave
La API entry resulta especialmente útil para agrupar elementos en vectores.
Para cada clave, use un Vec vacío como valor predeterminado la primera vez y después añada elementos al vector correspondiente.
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]);
}¿Por qué no usar get + insert?
Hacer un get y después un insert por separado busca la clave dos veces y entra en conflicto con el comprobador de préstamos.
La API entry realiza una sola búsqueda y le proporciona exactamente una referencia segura, por lo que es más rápida y clara.
Unirlo todo
Aquí se combinan el recuento y un valor predeterminado para determinar cuántas palabras distintas empiezan por cada letra.
Observe el patrón de recuento en una sola línea en acción.
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']);
}Comprobación rápida
Quiere contar caracteres realizando una sola búsqueda por carácter.
Resumen
La API entry permite insertar o actualizar con una sola búsqueda.
Usó or_insert, or_insert_with, or_default y and_modify para contar elementos y crear listas por clave de forma clara.
Preguntas frecuentes
¿La lección «Entry API y valores predeterminados» es gratis?
Sí — el texto completo de «Entry API y valores predeterminados» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Learn Rust Coding, actualiza a CoddyKit PRO. El curso de Learn Rust Coding incluye 4 lecciones en total.
¿Qué aprenderé en «Entry API y valores predeterminados»?
Actualice valores de forma sencilla Practicas Learn Rust Coding con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Learn Rust Coding?
No se requiere experiencia previa. Learn Rust Coding en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Entry API y valores predeterminados»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Learn Rust Coding?
Sí. Cada lección de Learn Rust Coding incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Crear un HashMap
- Entry API y valores predeterminados
- Trabajar con HashSet
- Contar y agrupar