我有一个有趣的情况。我循环遍历列表几次,我不知道如何生成我想要的列表。我本质上是试图按照外部列表的顺序在元组列表中排序第二个元组。
aclist = [{2,4},{2,6},{4,1},{4,8},{1, 2},{1,5},{3,3},{3,7}]
plist = [1,2,3,4]
newplist =
for pid <- plist do
Enum.map(aclist, fn({p_id,c_id}) ->
if p_id == pid do
c_id
end
end)
end
此代码的输出为:
[[2, 5, nil, nil, nil, nil, nil, nil], [nil, nil, 4, 6, nil, nil, nil, nil],
[nil, nil, nil, nil, 3, 7, nil, nil], [nil, nil, nil, nil, nil, nil, 1, 8]]
我需要输出为[2,5,4,6,3,7,1,8]
,但这需要我在嵌套循环中再次循环它以拉出这些数字。所以很明显我错过了一些东西,如何在第一次循环并提取正确的数据?
答案 0 :(得分:3)
for
在这里使用是完美的。它允许迭代多个列表,同时生成一个平面列表作为结果,并允许过滤:
iex(1)> aclist = [{2,4},{2,6},{4,1},{4,8},{1, 2},{1,5},{3,3},{3,7}]
[{2, 4}, {2, 6}, {4, 1}, {4, 8}, {1, 2}, {1, 5}, {3, 3}, {3, 7}]
iex(2)> plist = [1,2,3,4]
[1, 2, 3, 4]
iex(3)> for pid <- plist, {p_id, c_id} <- aclist, p_id == pid, do: c_id
[2, 5, 4, 6, 3, 7, 1, 8]