Google donne beaucoup d'exemples d'ajout et de suppression d'entrées dans un dictionnaire F # (ou autre collection). Mais je ne vois pas d'exemples à l'équivalent deComment déclarez-vous les valeurs d'une entrée de dictionnaire comme mutable?
myDict["Key"] = MyValue;
J'ai essayé
myDict.["Key"] <- MyValue
J'ai aussi tenté de déclarer le dictionnaire comme
Dictionary<string, mutable string>
ainsi plusieurs variantes sur ce. Cependant, je n'ai pas encore atteint la bonne combinaison ... si est réellement possible en F #.
Edit: Le code incriminé est:
type Config(?fileName : string) =
let fileName = defaultArg fileName @"C:\path\myConfigs.ini"
static let settings =
dict[ "Setting1", "1";
"Setting2", "2";
"Debug", "0";
"State", "Disarray";]
let settingRegex = new Regex(@"\s*(?<key>([^;#=]*[^;#= ]))\s*=\s*(?<value>([^;#]*[^;# ]))")
do File.ReadAllLines(fileName)
|> Seq.map(fun line -> settingRegex.Match(line))
|> Seq.filter(fun mtch -> mtch.Success)
|> Seq.iter(fun mtch -> settings.[mtch.Groups.Item("key").Value] <- mtch.Groups.Item("value").Value)
L'erreur que je reçois est:
System.NotSupportedException: This value may not be mutated
at [email protected]_Item(K key, V value)
at <StartupCode$FSI_0036>[email protected](Match mtch)
at Microsoft.FSharp.Collections.SeqModule.iter[T](FastFunc`2 action, IEnumerable`1 sequence)
at FSI_0036.Utilities.Config..ctor(Option`1 fileName)
at <StartupCode$FSI_0041>[email protected]()
stopped due to error
le temps de disponibilité des sites de recherche est vraiment plutôt pauvre. Voici le lien google cache temporairement http://209.85.229.132/search?q=cache:GGIlRD9kBnYJ:research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/fsharp.core/microsoft.fsharp. collections.map.html + f% 23 + microsoft.fsharp.collections.map & cd = 1 & hl = fr & ct = clnk & gl = fr – ShuggyCoUk
Notez que la recherche dans une arborescence binaire est O (log n), pas O (n log n) comme indiqué. – kvb
oops - faute de frappe – ShuggyCoUk