Bonjour,

Je suis dubitatif quant à la manière dont Rust (std::collections::LinkedList) gère les listes chaînées...
En général, en tous cas, moi je passe par des listes chaînées quand je dois, par exemple, "populer" des éléments d'un menu dans lequel on ne doit choisir "un élément".

Dans mon application j'ai une liste chaînée qui contient des strings, mon prompt gère les "key strokes" et compare le contenu du "prompt" avec les éléments de la liste qui commencent par le prompt et propose de "complèter" le prompt avec les propositions contenues dans la liste chaînée.
Avec la touche "down" l'utilisateur va "switcher" lorsqu'il existe plusieurs propositions... dans le sens head -> tail et avec "up" dans le sens tail -> head.

Le soucis c'est que ça ne fonctionne que dans un sens... dans la solution actuelle pour passer à l'élément suivant dans la liste je dois faire un pop() :{

Par exemple: ceci ne fonctionne pas, j'ai TOUJOURS le même élément...

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
loop 
	{
		let mut iteratoroutoffor = malistechaînée.iter();
		let chaine = iteratoroutoffor.next();																				// ne PASSE JAMAIS AU SUIVANT !! C'est de la merde !!!
 
		if chaine.is_some()
		{
			println!("loop {}",chaine.unwrap());
		}
		else 
		{  
			break;
		}
		compteur+=1;
		if compteur == malistechaînée.len()
		{
			println!("C'EST DE LA MERDE !!!");
			break;
		}
	}

De 1: c'est bien beau d'avoir un itérateur mais franchement je trouve plus logique d'avoir un pointeur next et previous pour chaque élément de la liste chaînée... devoir taper un iter.rev() c'est vraiment merdique d'autant que il ne semble pas possible de le modifier une fois dans la boucle...
De 2: c'est bien beau d'indiquer dans la doc que iter.next() passe à l'élément suivant si en fait il ne le fait pas...
...et dans le cas de la volonté de parcourir du tail au head on fait comment ? next() dans mon esprit c'est toujours de head à tail... de tail à head c'est previous cela me semble logique surtout si on se réfère aux adresses des éléments en mémoire...

Nom : debug_linkedlist000.png
Affichages : 164
Taille : 219,9 Ko

Dans ce snapshot les deux premières boucles sont des boucles for où je ne fais pas d'appel explicite à iter.next()... la dernière est une loop dans laquelle j'appelle iter.next()... qui ne renvoie pas l'élément suivant et reste donc bouclé sur lui-même...