Si j'ai un dictionnaire mutable, comment puis-je supprimer des éléments basés sur un critère?
Je pensais pouvoir faire soit: P>
myDict.Keys |> Seq.iter (fun x -> if dict.[x].criteria then dict.Delete(x) |> ignore)
3 Réponses :
Lorsque vous dites que vous avez un dictionnaire mutable, je suppose que vous voulez dire un système.Collections.Generic.dictionner et non une dicte immuable. Lorsque j'utilise ce type de dictionnaire dans C #, je finis généralement par un code similaire au code F # suivant (j'exécute cela dans un fichier .fsx dans VS2019).
dict |> Seq.iter( fun ele -> if ele.Value=9 then dict.Remove(ele.Key) |> ignore<bool> else ())
J'ai besoin d'un dictionnaire mutable car il détient des données d'un flux financier dans un système de négociation; La vitesse compte beaucoup i>. Donc, cela est similaire à la deuxième option que j'écris. J'étais curieux s'il y avait une autre façon en F #
Ce n'est pas une réponse directe à votre question, mais avez-vous envisagé d'utiliser la carte immuable intégrée carte code> type? Dans de nombreux cas, des dictionnaires mutables sont un meilleur choix (ils sont plus rapides), mais la carte vous permet de faire exactement ce que vous demandez bien à l'aide de la fonction
Map.filter code> Fonction:
Map.ofSeq [ 1, "one"; 2, "two"; 3, "three" ]
|> Map.filter (fun k v -> k % 2 = 1)
Oui, cela fonctionnerait, mais j'ai besoin du dictionnaire générique depuis que la vitesse compte beaucoup dans ce cas.
Dans F #, il y a un mécanisme pour l'itération des dictionnaires. Le reconnaissance active keyvalue code>
est utilisé pour déconstruire les valeurs du type KeyValuePair <'Key, valeur> code>
. Dans un dictionnaire générique, c'est le type de retour de son actuel code>
propriété.
in .NET, il y a un mécanisme pour muter un dictionnaire en spécifiant une clé individuelle pour supprimer un élément du dictionnaire, le Supprimer (tykey) code>
Méthode. P>
L'un d'entre eux est fonctionnel, l'autre impératif. Une approche crée un nouveau dictionnaire immuable, l'autre supprime des éléments d'un dictionnaire mutable existant. Tout ce qui correspond le mieux à votre cas d'utilisation. P>
Merci d'avoir répondu; Il est similaire à la deuxième option que j'ai proposée dans la question. Ma question était de voir s'il y a quelque chose de spécifique à F # au raccourci que le processus; Des réponses différentes, on dirait que ce n'est pas le cas.
La valeur de retour de
dict code> dans F # est en lecture seule et ne peut pas être mutée: msdn.microsoft.com/en-us/visualfshaarpdocs/conceptual/...
Désolé, pauvre libellé, je voulais dire "dict" comme "mydicary"; C'est un dictionnaire .NET et je modifierai le nom pour effacer la confusion