У меня есть функция, которая возвращает последовательность записей. В этой функции я начинаю построение списка с пустой фиктивной записи (вероятно, есть способ сделать это лучше), потому что мне нужно накапливать похожие записи, поэтому я «заправляю насос» пустой записью. Вот мой код:
let consolidate(somethings:seq<Something>) =
let mutable results = ResizeArray()
let mutable accumulatedSomething = {Foo = ""; Bar = ""; Count = 0;}
for s in somethings do
if s.Foo = accumulatedSomething.Foo && s.Bar = accumulatedSomething.Bar then
accumulatedSomething <- {Foo = s.Foo; Bar = s.Bar;
Count = s.Count + accumulatedSomething.Count}
else
results.Add(accumulatedSomething)
accumulatedSomething <- e
results |> Seq.cast |> Seq.skip 1
Если у вас есть способ сделать это лучше, я все слышу (я все еще мыслю процедурно), но меня все еще интересует ответ на этот конкретный вопрос. Позже в своем коде я пытаюсь распечатать список:
somethings |> Seq.iter( fun s -> printfn "%A" s)
Это отлично работает, когда в списке есть что-то. Но если список пуст и единственной записью, которая была в списке, была пропущенная пустая начальная запись, то эта строка завершается ошибкой с InvalidOperationException
с сообщением The input sequence has an insufficient number of elements?
Почему это происходит и как это исправить?