2

一連のレコードを返す関数があります。その関数では、同様のレコードを蓄積する必要があるため、空白のダミー レコードを使用してリストの作成を開始します (おそらくもっと良い方法があります)。空白のレコードで「ポンプを準備」します。これが私のコードです:

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?

なぜこれが起こり、どうすれば修正できますか?

4

1 に答える 1