Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 如何通过列表中的索引从元组中选择元素?_List_Haskell_Tuples_Modulo - Fatal编程技术网

List 如何通过列表中的索引从元组中选择元素?

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

我想从列表中选择元素,[[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 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函数的文档。