一連のレコードを返す関数があります。その関数では、同様のレコードを蓄積する必要があるため、空白のダミー レコードを使用してリストの作成を開始します (おそらくもっと良い方法があります)。空白のレコードで「ポンプを準備」します。これが私のコードです:
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?
なぜこれが起こり、どうすれば修正できますか?