【发布时间】:2020-01-17 01:13:10
【问题描述】:
我想使用一个列表,例如[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
【问题讨论】:
我想使用一个列表,例如[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
【问题讨论】:
您可以在此处对列表中的每个元素应用相同的函数,这就是 map 的用途。
假设你有:
indexes = [1, 2, 4]
values = [1, 0, 2, 5, 1, 0]
你需要做的是
map (values!!) indexes
这将返回所需的[0,2,1]。您正在使用部分应用程序对indexes 列表中的每个值执行values!!index,然后将其保存到与indexes 具有相同长度的列表中。
如果您想以一种从代码中实际可见的方式递归地执行此操作,您可以这样做:
obtainValues [] values = []
obtainValues (x:xs) values = [values !! x] ++ (obtainValues xs values)
注意(x:xs) 中的模式匹配,其中 x 是列表的第一个元素(在这种情况下假设为 Int),xs 表示列表的其余部分 ([Int])。
【讨论】:
obtainValues [x]...。当您模式匹配 [] 和 (x:xs) 时,您已经匹配了列表的所有构造函数。
portInfoX (3, 1, 20) = [0, 2, 5, 4, 6]。但是当我把它放进去时,我到处都是类型错误。