我有一个[(String, [String], IO Int)]
列表,我想对它进行排序。 sortBy (\x -> ...) list
需要我使用IO来获取IO Int
的内部值,这意味着我不能返回Ordering
,而只能使用IO Ordering
来获取sortBy
函数。有什么方法可以对列表进行排序吗?如何根据IO Int值对列表进行排序
2
A
回答
7
每个元组的第三个元素是IO Int
,所以它的值取决于外部世界。因此,排序列表的订单取决于外部世界。所以不,没有办法做一个[(String, [String], IO Int)]
这是排序的值IO Int
。
什么你可以做的是使IO [(String, [String], Int)]
的值,然后提起sortBy
功能到的IO
单子给你另一个IO [(String, [String], Int)]
,将产生由Int
排序的列表。这不是一个纯粹的列表,但是您可以将任何其他纯函数注入到monod中,以对其执行任意纯计算。
像这样的事:
import Control.Applicative
import Data.List
l :: [(String, [String], IO Int)]
l = [("Foo", [], return 2), ("Bar", [], return 1)]
f :: Monad m => (a, b, m c) -> m (a, b, c)
f (x, y, ioz) = ioz >>= \z -> return (x, y, z)
sl = sortBy (\(x, y, z) (x', y', z') -> compare z z') <$> mapM f l
我应该提到,因为它可能不是很明显,这将运行在它们在列表中出现了最初的顺序IO Int
行动。但要排序它们,您必须运行它们以获取值Int
,并且它们必须在的某些顺序中运行。
相关问题
- 1. 如何根据对象的属性对列表进行排序
- 2. 如何根据列值对numpy数组进行排序?
- 3. Java 1.6:根据模型值对模型列表进行排序
- 4. 试图根据字符串值对列表进行排序
- 5. 如何根据三个要求对列表进行排序?
- 6. 如何根据相对日期值对字典列表进行排序?
- 7. 如何根据列表中的值以降序对字典进行排序?
- 8. 如何根据python中的列表列表对列表进行排序?
- 9. 如何根据一些标准对groovy列表值进行排序
- 10. 如何根据多列对flex数据网格进行排序?
- 11. 根据列值对分层SQL行进行排序
- 12. 如何根据其中一列对行进行排序?
- 13. scala根据对象参数错误对列表进行排序
- 14. 根据内部表值对lua中的表进行排序
- 15. 根据列表对excel行进行排序
- 16. 根据数据列中的int值对C#中的DataRow类型列表进行排序
- 17. 如何根据对象的变量之一对对象列表进行排序
- 18. 如何根据匹配结果对此Excel表格进行排序和排列?
- 19. 如何根据最终列值对矩阵中的列进行排序?
- 20. 如何根据数值对MLE概率进行排序?
- 21. 如何根据子元素值对父元素进行排序?
- 22. 如何根据值对hashmap进行排序?
- 23. 根据缺失值的数量对列进行排序
- 24. 如何根据特定列对网格视图进行排序?
- 25. 如何根据日期字段对所有列进行排序
- 26. 如何根据条件对多列进行排序
- 27. CompareTo如何对列表进行排序?
- 28. 如何对IEnumerable列表进行排序?
- 29. 如何对列表进行排序?
- 30. 如何根据重复对表格列进行排名?
如果您的比较函数在'IO'中,那意味着每次执行比较都会发生变化。如果你无法可重复地比较两个元素,你如何排序列表? – 2013-04-25 00:49:47
我想我们在这里抽象地谈论。你如何做像Python或Java或Javascript这样的传统语言? – ErikR 2013-04-25 00:53:45
为什么不能运行'IO'动作,获取'Int',然后对列表进行排序?每次你比较列表的一个元素时,你真的想要获得一个可能不同的'Int'吗? – 2013-04-25 00:56:59