如果我想要排序Data.Text
值,我应该将其解压缩到String
并使用sort
或其他功能吗?当cons和append都是O(n)时,似乎很难为Text值编写快速排序函数。
答案 0 :(得分:6)
取决于“排序”Text
的含义。 Text
类型的大部分价值都与其正确处理奇怪的人类语言不一致性有关。考虑这些变体时排序的最佳方法可能是使用text-icu
import Data.Text.ICU
import qualified Data.Text as T
-- | Uses the Unicode Collation Algorithm. Others can be chosen by picking
-- something other than `uca` as your Collator.
sortText :: [T.Text] -> [T.Text]
sortText = sortBy (sortKey uca)
如果你按照你在问题中建议的方式解压缩字符串然后按字典字符顺序比较字符串 - 你可能会慢一些(String
比Text
更笨重)但是如果你有Unicode Text
值,你肯定会开辟奇怪的排序和奇怪的重新打包的可能性。