可能是重复的问题:
按元组的第二个元素对列表进行排序
嘿,我有一个看起来像这样的元组列表
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我希望按照元组中第二个元素 - 整数列表的长度,以升序方式对列表进行排序。但是,我的Haskell编程能力很弱,无法找到解决方法。
可能是重复的问题:
按元组的第二个元素对列表进行排序
嘿,我有一个看起来像这样的元组列表
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我希望按照元组中第二个元素 - 整数列表的长度,以升序方式对列表进行排序。但是,我的Haskell编程能力很弱,无法找到解决方法。
使用 sortBy ::(a -> a -> Ordering) -> [a] -> [a]
函数可以解决大部分排序问题。因此,任务是生成一个比较两个元素的排序函数,该函数基于元组的第二个元素的长度进行比较。compare `on` (length . snd) :: (a1, [a]) -> (a1, [a]) -> Ordering
是我们实际需要的。
eblo> sortBy (compare `on` (length . snd)) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
[("y",[1,2]),("x",[1,2,3]),("z",[1,2,3,4])]
sortBy (comparing $ length . snd) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
sortBy
不在Prelude中,而在Data.List中,而comparing
在Data.Ord中。 - Alex Moore-Niemi