Quel est le type de votre dictionnaire?
Si elle est IDictionary
non-générique que l'extrait de code l'indique, essayez ce qui suit (en F #, for
ne pas insérer implicitement les conversions, vous devez donc ajouter Seq.cast<>
pour obtenir une collection typée que vous pouvez facilement travailler avec):
for entry in dict |> Seq.cast<DictionaryEntry> do
// use 'entry.Value' and 'entry.Key' here
Si vous utilisez IDictionary<'K, 'V>
générique vous n'avez pas besoin de l'appel à Seq.cast
(si vous avez le contrôle de la bibliothèque, ce qui est mieux que l'option précédente):
for entry in dict do
// use 'entry.Value' and 'entry.Key' here
Si vous utilisez le type immuable F # Map<'K, 'V>
(ce qui est le meilleur type à utiliser si vous écrivez du code fonctionnel en F #), vous pouvez utiliser la solution par Pavel ou vous pouvez utiliser for
boucle avec le KeyValue
modèle actif comme ceci:
for KeyValue(k, v) in dict do
// 'k' is the key, 'v' is the value
Dans les deux cas, vous pouvez utiliser for
ou plusieurs iter
fonctions. Si vous avez besoin d'effectuer quelque chose avec des effets secondaires alors je préférerais for
loop (et ce n'est pas la première réponse où je mentionne ceci :-)), parce que c'est une construction de langage conçue à cet effet. Pour un traitement fonctionnel, vous pouvez utiliser différentes fonctions comme Seq.filter
etc ..
curieux - pour quelque raison que ce printf avec un \ n à la fin de la chaîne plutôt que printfn? –
Je pose la question inverse chaque fois que je vois 'printfn'. Pas de raison, bien sûr, juste une préférence personnelle. –