es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error nos está indicando que los requisitos del rasgo (trait bounds) para Iterator no se cumplen en Vec<string>. Esto significa que Vec<string> no implementa el rasgo Iterator, el cual es necesario para que funcione el método enumerate().

    Para solucionar esto, necesitamos asegurarnos de que nuestro vector implemente el rasgo Iterator. Una forma de hacer esto es llamar al método iter() 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 a enumerate() debería funcionar. Sin embargo, el mensaje de error sugiere que output_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 a sort() 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.

Comments are closed.