type のリストがありIList<Effort>
ます。モデル Effort には、float
呼び出された が含まれていAmount
ます。Amount
F# で、リスト全体の合計を返したいと思います。これはどのように達成されますか?
2025 次
4 に答える
7
efforts |> Seq.sumBy (fun e -> e.Amount)
于 2010-04-03T17:01:43.837 に答える
5
Seq.fold
、パイプラインSeq.fold
化、およびパイプライン化の回答に賛成票を投じましたSeq.sumBy
(私は 3 番目の回答が一番好きです)。
seq<'T>
とはいえ、が F# の の名前であるとは誰も言及していないIEnumerable<T>
ため、Seq
モジュール関数IEnumerable
は を含む任意IList
の で機能します。
于 2010-04-03T18:14:57.747 に答える
4
興味深い点の 1 つは、型注釈の使用を避けることもできるということです。sepp2kによるコードでは、effort
値が typeであることを指定する必要がありますEffort
。これは、コンパイラがコードを左から右に処理しているためです (effort.Amount
型がわからない場合、呼び出しで失敗します)。これは、パイプライン演算子を使用して記述できます。
efforts |> Seq.fold (fun acc effort -> acc + effort.Amount) 0.0
これで、コンパイラは type のコレクションをeffort
処理していることを認識しているため、 の型を認識します。ちょっとした改善ですが、とてもいいと思います。efforts
IList<Effort>
于 2010-04-03T16:56:15.077 に答える
4
Seq.fold (fun acc (effort: Effort) -> acc + effort.Amount) 0.0 efforts
于 2010-04-03T15:30:26.737 に答える