我正在寻找关于元组第一元素的一小部分对[(String,String)]
进行排序的方法
此问题类似于 Sort list of strings by a part of the string ,但在Haskell中。
sortBy (compare `on` fst) list
工作正常,但我需要优化搜索,以便格式化字符串" aa bb cc"将仅根据cc部分进行分类
我试着这样做:
sortBy (compare `on` ((!!2)(splitOn " " (fst)))
不幸的是它不起作用,可能是由于我对如何嵌套函数缺乏了解。
答案 0 :(得分:1)
因为您必须查询每个组合中每个组合的最后一个值,所以此解决方案根本不是很有效。但至少有一种方法可以做到这一点(随意提出更好的选择,读者!)
import Data.List.Split
import Data.List
sortStrTuples :: [(String,String)] -> [(String,String)]
sortStrTuples = sortBy (compare `on` f)
where f (x,_) = last $ (splitOn " ") x
基本上,我们根据该列表的处理版本对提供的列表进行排序。对于每一对,我们将元组的第一个值中包含的字符串拆分为其空格,然后选择最后一个元素。因此,给定元组("blah1 blah2","blah blah")
,我们的本地函数f
返回“blah2”。然后我们依赖内置的字符串比较行为(符合我们想要的)。
测试这个,我们可以看到它的行为符合预期:
ghci>> sortStrTuples [("aa bb cc","blah"),("aa bbb","blah")]
[("aa bbb","blah"),("aa bb cc","blah")]