Слушай, у меня есть какой-то метод, в котором я пытаюсь проверить, изменилось ли значение, и записать его, если оно изменилось, но мне нужно помнить, какие значения были изменены, и вот проблема, я не могу установить измененныефлаг, потому что я не знаю, как изменить элемент ref, и я не могу использовать изменяемый там.
member X.qArchive() =
//let mutable rememberer = [for d in db.AlarmDictionaries -> d.ID, false].ToArray()
let rememberer = ref ( [for d in db.AlarmDictionaries -> d.ID, false].ToArray() )
seq {for a in db.ArchiveDescretes do
let i = ref 0
for r in !rememberer do
if a.ID = fst r && snd r = false then
rememberer.[(!i)] := fst r, true // Error
//rememberer.[(!i)] <- fst r, true // Error
for c in db.AlarmDictionaries do
if (c.ID = a.ID) then
yield a.Date, c.Message, a.Value
i := !i + 1 } |> Array.ofSeq
также, если вы знаете, как я могу реализовать эту идею каким-то лучшим способом, я тоже буду вам благодарен.
вот мой злой вариант:
member X.qArchive() =
seq { let metarememberer = ref ( [for d in db.AlarmDictionaries -> d.ID, false].ToArray() )
let rememberer = ref ( [for d in db.AlarmDictionaries -> d.ID, false].ToArray() )
for a in db.ArchiveDescretes do
let i = ref 0
for r in !metarememberer do
if a.ID = fst r && snd r = false then
(!metarememberer).[!i] <- fst r, true
for c in db.AlarmDictionaries do
if c.ID = a.ID && c.Value = a.Value then
let j = ref 0
for rm in !rememberer do
if a.ID = fst rm then
(!rememberer).[!j] <- fst rm, a.Value
j := !j + 1
yield a.Date, c.Message
else
let j = ref 0
for rm in !rememberer do
if a.ID = fst rm && a.Value <> snd rm then
(!rememberer).[!j] <- fst rm, a.Value
for c in db.AlarmDictionaries do
if c.ID = a.ID && c.Value = a.Value then
yield a.Date, c.Message
j := !j + 1
i := !i + 1
} |> Array.ofSeq
Обновление: Ведь мой вариант не работает.Что-то здесь не так ... Я могу видеть одно и то же событие 2 раза, мне нужно видеть его только при изменении значения, что означает, что я не могу видеть одно и то же событие 2 раза.