Quel est le type de votre dictionnaire?
S'il s'agit d'un IDictionary
non générique comme votre extrait de code le suggère, essayez ce qui suit (En F#, le for
n'insère pas implicitement de conversions, donc vous devez ajouter Seq.cast<>
pour obtenir une collection typée avec laquelle vous pouvez facilement travailler) :
for entry in dict |> Seq.cast do
// utilisez 'entry.Value' et 'entry.Key' ici
Si vous utilisez un IDictionary<'K, 'V>
générique alors vous n'avez pas besoin d'appeler Seq.cast
(si vous avez un contrôle sur la bibliothèque, c'est mieux que l'option précédente) :
for entry in dict do
// utilisez 'entry.Value' et 'entry.Key' ici
Si vous utilisez le type F# immuable Map<'K, 'V>
(qui est le meilleur type à utiliser si vous écrivez du code fonctionnel en F#) alors vous pouvez utiliser la solution de Pavel ou vous pouvez utiliser une boucle for
avec le motif actif KeyValue
comme ceci :
for KeyValue(k, v) in dict do
// 'k' est la clé, 'v' est la valeur
Dans les deux cas, vous pouvez utiliser soit for
soit diverses fonctions iter
. Si vous avez besoin d'effectuer quelque chose avec des effets secondaires alors je préférerais une boucle for
(et ce n'est pas la première réponse où je mentionne cela :-)), car c'est une construction de langage conçue à cet effet. Pour un traitement fonctionnel vous pouvez utiliser diverses fonctions comme Seq.filter
etc..