我有一个像这样的列表
[(1,2),(2,1),(3,3)]
我想用第二个元素对它进行排序,所以它是:
[(3,3),(1,2),(2,1)]
我已经尝试了
mySort t = sortBy (compare `on` (\(a,b)->b)) t
但是ghci显然不认识sortBy
好的,编辑:
我使用GHCi编译实际的.hs文件,所以我得到了我的标题:
import Data.List (sortBy)
import Data.Function (on)
module TupleListPolynomial where
type Poly = [(Float,Int)]
如果我这样写,编译器就不会识别'模块'(使用:l和:r btw):
[1 of 1] Compiling Main ( TupleListPolynomial.hs, interpreted )
TupleListPolynomial.hs:5:1: parse error on input ‘module’
如果我翻转它并写下面的导入品,它就不会认识到导入'同样的错误。
编辑:解决这个问题:
module TupleListPolynomial where
import Data.List (sortBy)
import Data.Function (on)
type Poly = [(Float,Int)]
答案 0 :(得分:10)
一些观察结果:
sortBy
和on
,您必须先导入它们flip compare
代替compare
\ (a,b) -> b
您也可以使用snd
(感谢Arnon)`
代替'
代替`on`
(感谢interjay)t
中mySort t = ... t
不需要好的 - 如果你把它放到某个myPolynomial.hs
文件中(或者你想要调用它),这个应该编译并加载并运行到ghci:
module TupleListPolynomial where
import Data.List (sortBy)
import Data.Function (on)
type Poly = [(Float,Int)]
mySort :: Ord b => [(a, b)] -> [(a, b)]
mySort = sortBy (flip compare `on` snd)
在GHCi中import Data.List (sortBy)
import Data.Function (on)
let mySort = sortBy (flip compare `on` snd)
实际上,这就是我这样做的测试方法:
> mySort [(1,2),(2,1),(3,3)]
[(3,3),(1,2),(2,1)]