Scala的函數列表中有一個函數groupBy
,它接受一個從列表項中提取關鍵字的函數,並返回另一個列表,其中的項目是由關鍵字和產生該關鍵字的項目列表組成的元組。換句話說,這樣的事情:Haskell相當於Scala的組合
List(1,2,3,4,5,6,7,8,9).groupBy(_ % 2)
// List((0, List(2,4,6,8)), (1, List(1,3,5,7,9)))
(事實上,它看起來像在當前版本中,它提供了一個Map
代替,但是這並不重要)。 C#有一個更有用的版本,可以讓你同時映射這些值(如果你的關鍵函數只是提取元組的一部分,非常有用)。
Haskell有一個groupBy
,但它有些不同 - 它根據一些比較函數對事情進行分組。
在我寫和寫之前,Haskell中是否有相當於Scala的groupBy
? Hoogle沒有任何我期望的簽名看起來像(下面),但我可能剛剛弄錯了。
Eq b => (a -> b) -> [a] -> [(b,[a])]
我對此進行了一些修改,使C#選項可以在同一時間對值應用一個函數:'myGroupBy fg xs = map (f。head &&& g)。 groupBy((==)\'on \'f)。 sortBy(比較\'f)$ xs' – Impredicative 2013-03-15 10:53:52
@Impredicative:這看起來非常有用! – 2013-03-15 10:58:30
@Impredicative:'myCSharpGroupby f g xs = map(second g)$ myGroupBy f xs'也可以工作 – cheecheeo 2013-03-22 06:28:56