2013-02-23 76 views
-3

好了,所以我一直在F#玩弄的最后几天,发现了一些在线教程踢左右(无解!)如果我有以下列表 -操纵的Fsharp列表

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

我会怎样过滤此列表以首先显示组RS中的项目数量,其次是UE? 我在想List.filter,List.length,不太清楚从这两个地方去哪里去得到每个组的具体数字。感谢您的帮助

回答

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)] 
+0

你可以向我解释一下,通过snd和Seq.toList的函数Seq.count实质上是指通俗的说法吗? – user2093122 2013-02-23 20:00:03

+0

我给代码片段添加了注释。您可以按照我的答案中的链接了解这些操作。 – pad 2013-02-23 20:05:54

+0

欢呼的队友非常感谢 – user2093122 2013-02-23 22:10:25