第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用Haskell對列表中的類似項進行分組?

如何使用Haskell對列表中的類似項進行分組?

如何使用Haskell對列表中的類似項進行分組?給出一個像這樣的元組列表:dic = [(1,"aa"),(1,"cc"),(2,"aa"),(3,"ff"),(3,"gg"),(1,"bb")]如何對列表grp的dic項進行分組,其中,grp  = [(1,["aa","bb","cc"]), (2, ["aa"]), (3, ["ff","gg"])]我實際上是Haskell的新手......并且似乎愛上了它。在Data.List中使用group或groupBy只會對列表中相似的相鄰項進行分組。我為此編寫了一個低效的函數(shù),但由于我需要處理一個非常大的編碼字符串列表,因此會導(dǎo)致內(nèi)存故障。希望你能幫我找到更有效的方法。
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經(jīng)驗 獲得超7個贊

這是我的解決方案:


import Data.Function (on)

import Data.List (sortBy, groupBy)

import Data.Ord (comparing)


myGroup :: (Eq a, Ord a) => [(a, b)] -> [(a, [b])]

myGroup = map (\l -> (fst . head $ l, map snd l)) . groupBy ((==) `on` fst)

          . sortBy (comparing fst)

這首先通過以下方式對列表進行排序sortBy:


[(1,"aa"),(1,"cc"),(2,"aa"),(3,"ff"),(3,"gg"),(1,"bb")]     

=> [(1,"aa"),(1,"bb"),(1,"cc"),(2,"aa"),(3,"ff"),(3,"gg")]

然后按相關(guān)鍵對列表元素進行分組groupBy:


[(1,"aa"),(1,"bb"),(1,"cc"),(2,"aa"),(3,"ff"),(3,"gg")] 

=> [[(1,"aa"),(1,"bb"),(1,"cc")],[(2,"aa")],[(3,"ff"),(3,"gg")]]

然后將分組的項目轉(zhuǎn)換為元組map:


[[(1,"aa"),(1,"bb"),(1,"cc")],[(2,"aa")],[(3,"ff"),(3,"gg")]] 

=> [(1,["aa","bb","cc"]), (2, ["aa"]), (3, ["ff","gg"])]`)

測試:


> myGroup dic

[(1,["aa","bb","cc"]),(2,["aa"]),(3,["ff","gg"])]


查看完整回答
反對 回復(fù) 2019-08-23
?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

盡可能重用庫代碼。

import Data.Map
sortAndGroup assocs = fromListWith (++) [(k, [v]) | (k, v) <- assocs]

在ghci中嘗試一下:

*Main> sortAndGroup [(1,"aa"),(1,"cc"),(2,"aa"),(3,"ff"),(3,"gg"),(1,"bb")]fromList [(1,["bb","cc","aa"]),(2,["aa"]),(3,["gg","ff"])]


查看完整回答
反對 回復(fù) 2019-08-23
?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

您也可以使用TransformListComp擴展,例如:

Prelude> :set -XTransformListComp 
Prelude> import GHC.Exts (groupWith, the)Prelude GHC.Exts> let dic = [ (1, "aa"), (1, "bb"), (1, "cc") , (2, "aa"), (3, "ff"), (3, "gg")]Prelude GHC.Exts> [(the key, value) | (key, value) <- dic, then group by key using groupWith][(1,["aa","bb","cc"]),(2,["aa"]),(3,["ff","gg"])]


查看完整回答
反對 回復(fù) 2019-08-23
  • 3 回答
  • 0 關(guān)注
  • 702 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號