120 votes

Comment puis-je obtenir le nième élément d'une liste ?

Comment puis-je accéder à une liste par index dans Haskell, analogue à ce code C ?

int a[] = { 34, 45, 56 };
return a[1];

190voto

phimuemue Points 11644

Regardez ici, l'opérateur utilisé est !!.

Soit [1,2,3]!!1 vous donne 2, puisque les listes sont indexées à 0.

11voto

Landei Points 30509

La réponse directe a déjà été donnée : Utilisez !!.

Cependant, les débutants ont souvent tendance à surutiliser cet opérateur, ce qui est coûteux dans Haskell (parce que vous travaillez sur des listes liées simples, pas sur des tableaux). Il existe plusieurs techniques utiles pour éviter cela, la plus facile est d'utiliser zip. Si vous écrivez zip ["foo","bar","baz"] [0..], vous obtenez une nouvelle liste avec les indices "attachés" à chaque élément d'une paire : [("foo",0),("bar",1),("baz",2)], ce qui est souvent exactement ce dont vous avez besoin.

5voto

Abgo80 Points 223

Vous pouvez utiliser !!, mais si vous voulez le faire récursivement, alors ci-dessous est une façon de le faire :

dataAt :: Int -> [a] -> a
dataAt _ [] = error "Empty List!"
dataAt y (x:xs)  | y <= 0 = x
                 | otherwise = dataAt (y-1) xs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X