Identification des duplicats
Nous cherchons à identifier des comptes utilisateur partageant le même mot de passe. En effet, cela peut être un signe qui permet d'identifier deux comptes utilisateurs appartenant à la même personne physique.
Pour cela, nous allons construire une HashMap
pour associer à un mot de passe les logins des comptes qui l'utilisent. Nous voulons construire une fonction group()
dans le module account
qui groupe les Account
par mot de passe :
fn group(accounts: Vec<Account>) -> HashMap<String, Vec<String>> {
todo!()
}
- Implémentez la fonction
account::group()
. On regardera avec intérêt la méthodeHashMap::entry()
et les méthodesor_insert()
ouor_insert_with()
applicables sur ce typeEntry
. - Affichez le résultat de cette fonction appliquée sur les comptes définis sur la ligne de commande depuis
main()
.
$ cargo run -- johndoe:abcde janedoe:1234 admin:abcde
{
"abcde": [
"johndoe",
"admin",
],
"1234": [
"janedoe",
],
}
- En utilisant la méthode
retain()
deHashMap
, ne conservez que les entrées correspondant à plusieurs comptes et n'affichez que ceux-ci.
$ cargo run -- johndoe:abcde janedoe:1234 admin:abcde
{
"abcde": [
"johndoe",
"admin",
],
}
- Améliorez l'affichage en affichant une ligne par mot de passe partagé. Pour grouper les logins, vous pourrez utiliser la méthode
Vec::join()
.
$ cargo run -- johndoe:abcde janedoe:1234 admin:abcde anonymous:1234
Password 1234 used by janedoe, anonymous
Password abcde used by johndoe, admin