List 如何通过列表中的索引从元组中选择元素?
我想从列表中选择元素,[[1,2],[3,4],[5,6]]第一次,第二次,第一次,依此类推。 我想我可以使用zip在对前面添加一个计数器,并使用模选择部件,现在我的列表如下所示:List 如何通过列表中的索引从元组中选择元素?,list,haskell,tuples,modulo,List,Haskell,Tuples,Modulo,我想从列表中选择元素,[[1,2],[3,4],[5,6]]第一次,第二次,第一次,依此类推。 我想我可以使用zip在对前面添加一个计数器,并使用模选择部件,现在我的列表如下所示: let a = [(0,[1,2]),(1,[3,4]),(2,[5,6]),(3,[7,8]),(4,[9,10])] 但是我现在如何选择元素呢 伪代码应该是 for each tuple in list: first part of tuple is the selector, second par
let a = [(0,[1,2]),(1,[3,4]),(2,[5,6]),(3,[7,8]),(4,[9,10])]
但是我现在如何选择元素呢
伪代码应该是
for each tuple in list:
first part of tuple is the selector, second part is the pair
if selector mod 2 : choose pair[0] else choose pair[1]
列表a的输出应该是:1,4,5,7,9
> zipWith (!!) [[1,2],[3,4],[5,6],[7,8],[9,10]] (cycle [0,1])
[1,4,5,8,9]
如果你知道你在处理长度为2的列表,你可能应该使用pairs来代替
> zipWith ($) (cycle [fst, snd]) [(1,2),(3,4),(5,6),(7,8),(9,10)]
[1,4,5,8,9]
我非常喜欢@DanielWagner的回答。第一种方法非常简单有效。他的第二个问题只是有点难理解,但也很简单。当理论简单时,它增加了它们的准确性。这是我很抱歉的解决方案,但它确实使用了您的结构。关联列表是元组。有人建议您使用元组,但对于这一点,您所拥有的和可能需要的都是可以的
a = [(0,[1,2]),(1,[3,4]),(2,[5,6]),(3,[7,8]),(4,[9,10])]
[if even i then x else y | (i,(x:y:z)) <- a]
[1,4,5,8,9]
但是如果它总是一对,那么通常最好使用2元组,因为我们通过类型强制执行。其次,我的想法是,您可能希望以相反的方式选择它:如果选择器mod 2为1,那么您可能希望选择pair[1]?您还可以使用cycle[True,False]压缩,这样您就不必使用mod x 2。无论如何,您应该在这个列表或您的列表中使用map。@chi:您可以添加一个示例吗?我不懂怎么用this@Willem范昂森:也许,我还没有弄明白我真正需要做什么,我只知道我必须选择交替值;但是我想我不能使用元组,因为输入是列表形式的alreadyThanks,你能解释一下是什么吗!!你在这儿干什么?我仍然在为哈斯克尔的概念而挣扎general@user2567875您可以使用查找Haskell函数的文档。