按秒元素对列表列表进行排序

sep*_*eph 5 sorting haskell compare list

当我尝试通过第二个元素订购列表列表时,我很难过,就像这样

list = [[_,B,_,_,_],[_,A,_,_,_],[_,C,_,_,_]]
Run Code Online (Sandbox Code Playgroud)

进入这个:

list = [[_,A,_,_,_],[_,B,_,_,_],[_,C,_,_,_]]
Run Code Online (Sandbox Code Playgroud)

我试过了:

sortBy compare $ [([1,2]!!1),([2,3]!!1)]
Run Code Online (Sandbox Code Playgroud)

但它会过滤秒元素并将其排序[2,3].

Tik*_*vis 9

什么你试图做的排序是名单[([1,2]!!1),([2,3]!!1)],这相当于[2, 3]通过compare.你想要做的是使用sortBy一个首先得到第二个元素然后比较的函数:

sortBySecond = sortBy (\ a b -> compare (a !! 1) (b !! 1))
Run Code Online (Sandbox Code Playgroud)

然后获取您拥有的列表并将此功能应用于它:

sortBySecond [[1, 2], [2, 3]]
Run Code Online (Sandbox Code Playgroud)

您可以通过使用使该功能更整洁on来自Data.Function:

import Data.Function

sortBySecond = sortBy (compare `on` (!! 1))
Run Code Online (Sandbox Code Playgroud)

您还可以使用comparing来自Data.Ord:

sortBySecond = sortBy $ comparing (!! 1)
Run Code Online (Sandbox Code Playgroud)

  • 注意'比较foo =比较'在'foo`上 (2认同)