Avatar ·

¿Cómo recolectar elementos de un iterador en un array de tamaño fijo en Rust?

¡Hola a todos! Recientemente empecé a aprender Rust y me encontré con un problema que parece muy simple, pero no encuentro la solución correcta.

Tengo un iterador que devuelve una secuencia de números. Quiero recolectar todos esos números en un array [i32; N], donde N se conoce en tiempo de compilación. Por ejemplo, estoy escribiendo una función que toma un slice de números y devuelve un array con los primeros 5 elementos:

fn first_five(data: &[i32]) -> [i32; 5] {
    data.iter().take(5).collect() // ¡no funciona!
}

El compilador da un error: the trait bound `[i32; 5]: FromIterator<&i32>` is not satisfied. Entiendo que collect() funciona con colecciones como Vec, pero ¿cómo hacer que funcione con arrays?

Intenté especificar el tipo explícitamente: let arr: [i32; 5] = data.iter().take(5).collect(); — pero tampoco ayuda. En otros lenguajes (Python, JavaScript) esto se hace en una línea, mientras que aquí tengo que escribir bucles.