0
votes

Supprimer des éléments d'un dictionnaire basé sur un critère, en F #

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)

f#

2 commentaires

La valeur de retour de dict 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


3 Réponses :


1
votes

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 ())


1 commentaires

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 . Donc, cela est similaire à la deuxième option que j'écris. J'étais curieux s'il y avait une autre façon en F #



1
votes

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)


1 commentaires

Oui, cela fonctionnerait, mais j'ai besoin du dictionnaire générique depuis que la vitesse compte beaucoup dans ce cas.



0
votes

Dans F #, il y a un mécanisme pour l'itération des dictionnaires. Le reconnaissance active keyvalue est utilisé pour déconstruire les valeurs du type KeyValuePair <'Key, valeur> . Dans un dictionnaire générique, c'est le type de retour de son actuel 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) Méthode.

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. xxx


1 commentaires

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.