Si quieres que la gente te pueda ayudar bien, pon siempre el enunciado o explica detalladamente lo que quieres hacer. Porque no se entiende bien lo que dices... Nos lo imaginamos... Pero vamos, el código no hace lo que estas preguntando y es confuso.
Imaginamos que lo que quieres es sacar un contador de cuantas veces se repiten los números. En tu ejemplo el resultado seria:
{
7: 1,
1: 5,
9: 2,
6: 1,
2: 2,
3: 2,
}
Tienes 3 maneras de resolverlo, dependiendo del enunciado.
array estaticoLa mas simple y basica es resolverlo con un array. Si sabes el numero maximo o el rango de numeros que tienes en tu array lo puedes aplicar directamente. Por ejemplo si sabes que solo tendras numeros 10 numeros. Puedes inicializar un array vacio con [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] y luego iterar tu array, cuando encuentres un valor, sabes que su indice sera valor - 1, incrementas.
fn array() {
let array = [1, 2, 3, 1, 2, 3, 1, 1, 6, 9, 9, 7, 1]; // array original
let mut counter = [0; 10]; // contador con 10 zeros
for n in &array {
counter[n-1] += 1; // para cada n, su indice, sera n - 1, incremento el valor
}
}
map/diccionarioLa opcion habitual cuando no conces el tama;o es un hashmap, para cada elemento del array, coges la entrada y la modificas incrementando 1, si no existe le pones un 1.
let mut map: HashMap<u32, u32> = HashMap::new();
let array = [1, 2, 3, 1, 2, 3, 1, 1, 6, 9, 9, 7, 1];
for n in &array {
map.entry(*n)
.and_modify(|v| *v += 1)
.or_insert(1);
}
coleccion de arrayOtra opcion es en el caso de que no conozcas el tama;o total de tu array, puedes usar una estructura de datos como una ArrayList en java. La diferencia entre una estructura como el array list y un array es que en el segundo conoces su tama;o de antemano. En el caso anterior hemos supuesto que tendriamos como maximo 10 elementos, por tanto podemos inicializar ese array con 10 posiciones a 0. En el caso del arraylist no sabemos cuantos elementos tendremos.
fn array_list() {
let array = [1, 2, 3, 1, 2, 3, 1, 1, 6, 9, 9, 7, 1];
let mut counter: Vec<i32> = Vec::new(); // inicializo un array con 0
for n in &array {
if n > &counter.len() { // si intento poner un numero que no cabe tengo que hacer el array mas grande
counter.resize_with(*n, Default::default); // lo que hago es incrementar el tam;ao del array y copiarme los valores que ya teniamos
}
counter[n-1] += 1; // incrementamos el valor
}
}
Aunque hacer esto ultimo tu a mano no tiene mucho sentido, normalmente los hashmaps internamente ya lo haran por ti y de manera mas inteligente...
Como puedes ver esto es mas complejo, cada vez que mi array se queda peque;o porque necesito meter una n mas grande de lo que consideraba, tengo que llamar una funcion para rehacer el array.
En general si vas a programar te recomiendo que primero empieces escribiendo la funcion y el resultado, aunque sea un print por pantalla de lo que quieres obtener. Asi puedes completar la funcion y comprobar si esta bien. Ponte unos cuantos ejemplos a mano...