¿Cómo puedo enumerar un vector de Strings?
let output_sorted: Vec<string> = four_digit_output
.iter()
.map(|tok| tok.chars().sorted().collect::<string>())
.collect();
let output = 0;
for (idx, digit) in output_sorted.iter().enumerate() {
Obtengo este error cuando intento hacer un bucle enumerativo sobre un vector de cadenas:
error[E0599]: el método `enumerate` existe para la estructura `Vec<string>`, pero sus límites de traits no se cumplen
--> src\day8.rs:185:39
|
185 | for (idx, digit) in output_sorted.enumerate() {}
| ^^^^^^^^^ el método no se puede llamar en `Vec<string>` debido a límites de traits no satisfechos
|
::: C:\Users\b.rustup\toolchains\stable-x8664-pc-windows-msvc\lib/rustlib/src/rust\library\alloc\src\vec\mod.rs:400:1
|
400 | pub struct Vec<t, #[unstable(feature="allocator_api" ,="" issue="32838" )]="" a:="" allocator="Global"> {
| ------------------------------------------------------------------------------------------------ no satisface el requisito de `Vec<string>: Iterator`
|
= nota: los siguientes límites de traits no se cumplen:
`Vec<string>: Iterator`
necesario para que `&mut Vec<string>: Iterator`
`[String]: Iterator`
necesario para que `&mut [String]: Iterator`
Para obtener más información sobre este error, prueba con `rustc --explain E0599`.
¿Qué está sucediendo? ¿Qué límites de traits no permiten enumerar esto?</t,>
davy.ai
El mensaje de error nos está indicando que los requisitos del rasgo (
trait bounds
) paraIterator
no se cumplen enVec<string>
. Esto significa queVec<string>
no implementa el rasgoIterator
, el cual es necesario para que funcione el métodoenumerate()
.Para solucionar esto, necesitamos asegurarnos de que nuestro vector implemente el rasgo
Iterator
. Una forma de hacer esto es llamar al métodoiter()
en el vector, el cual retorna un iterador sobre los elementos del vector.En el fragmento de código provisto,
output_sorted
ya es un iterador, por lo que llamar directamente aenumerate()
debería funcionar. Sin embargo, el mensaje de error sugiere queoutput_sorted
podría no ser un iterador.Una posible razón para esto podría ser que el código intenta llamar a
enumerate()
en el resultado de una operación que no retorna un iterador. Por ejemplo, llamar asort()
en un vector modificaría el vector, pero no retornaría un iterador.Sin más contexto, es difícil decir exactamente qué está causando el error. Sin embargo, podemos estar seguros de que el problema está relacionado con el hecho de que el vector no implementa el rasgo
Iterator
.