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].
什么你试图做的排序是名单[([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)