-3

さて、ここ数日F#で遊んでいて、オンラインでいくつかのチュートリアルが始まっているのを見つけました(解決策はありません!)次のリストがある場合-

let new = [
 (1808,"RS");
 (1974,"UE");
 (1066,"UE");
 (3005,"RS");
 (2007,"UE");
 (2012,"UE");
 ]

このリストをフィルタリングして、最初にグループRS内のアイテムの数を表示し、次にUEを表示するにはどうすればよいですか?List.filter、List.lengthを考えていますが、各グループの特定の数値を取得するために、これら2つからどこに行くのかよくわかりません。助けてくれてありがとう

4

1 に答える 1

2

一般に、グループ化操作はSeq.groupByによって簡単に処理されます。

各グループのアイテム数だけをカウントしたい場合は、Seq.countByが最適です。

[ (1808,"RS");
  (1974,"UE");
  (1066,"UE");
  (3005,"RS");
  (2007,"UE");
  (2012,"UE"); ]
// 'countBy' returns a sequence of pairs denoting unique keys and their numbers of occurrences
// 'snd' means that we try to pick a key as the *second* element in each tuple
|> Seq.countBy snd
// convert results back to an F# list
|> Seq.toList

// val it : (string * int) list = [("RS", 2); ("UE", 4)]
于 2013-02-23T19:54:31.833 に答える