我想使用一个列表,例如[1、2、4]从另一个列表中获取元素,例如[1、0、2、5、1、0]使用递归,因此结果存储在第三列表中。好像第一个列表表示第二个列表中所需的每个元素的位置,就像这样:
[1, 0, 2, 5, 1, 0]!!1 = 1
[1, 0, 2, 5, 1, 0]!!2 = 0
[1, 0, 2, 5, 1, 0]!!4 = 5
我该怎么做?我知道上面的结果应该分别为0、2和1,但这很容易解决。
答案 0 :(得分:1)
您可以在这里为列表中的每个元素应用相同的功能,这就是map
的作用。
假设您拥有:
indexes = [1, 2, 4]
values = [1, 0, 2, 5, 1, 0]
您需要做的是
map (values!!) indexes
这将返回所需的[0,2,1]
。您正在使用部分应用程序对values!!index
列表中的每个值执行indexes
,然后将其保存到与indexes
长度相同的列表中。 / p>
如果您想以一种在代码中实际可见的方式递归地执行此操作,则可以执行以下操作:
obtainValues [] values = []
obtainValues (x:xs) values = [values !! x] ++ (obtainValues xs values)
请注意(x:xs)
中的模式匹配,其中x是列表的第一个元素(在这种情况下,假设为Int),而xs表示列表的其余部分([Int])。