如何在不使用 lists:append() 的情况下将字符串附加到字符串列表。使用 list:append() 的代码在这里,如何使用列表理解做同样的事情?
S1 = "String1" .
S2 = "String2" .
S3 = "String3" .
L1 = [ S1, S2 ] .
L2 = lists:append(L1,[S3]).
最后一行产生结果
["String1","String2","String3"]
如何使用列表理解来做到这一点?
如何在不使用 lists:append() 的情况下将字符串附加到字符串列表。使用 list:append() 的代码在这里,如何使用列表理解做同样的事情?
S1 = "String1" .
S2 = "String2" .
S3 = "String3" .
L1 = [ S1, S2 ] .
L2 = lists:append(L1,[S3]).
最后一行产生结果
["String1","String2","String3"]
如何使用列表理解来做到这一点?
查看 Erlang 文档: http ://www.erlang.org/doc/efficiency_guide/listHandling.html
正如那里所说 - 将元素添加到列表的尾部效率低下,因为它会导致创建新列表。
如果您需要将元素添加到列表的尾部,更好的方法可能是:以相反的顺序创建列表。最后只需调用函数列表:reverse/1
看这个例子:
18> S1 = "String1".
"String1"
19> S2 = "String2".
"String2"
20> S3 = "String3".
"String3"
21> S4 = "String4".
"String4"
22> L1 = [ S2, S1 ].
["String2","String1"]
23> L2 = [ S3 | L1 ].
["String3","String2","String1"]
24> L3 = [ S4 | L2 ].
["String4","String3","String2","String1"]
25> L4 = lists:reverse( L3 ).
["String1","String2","String3","String4"]
它在内存使用方面比这个更有效:
34> S1 = "String1".
"String1"
35> S2 = "String2".
"String2"
36> S3 = "String3".
"String3"
37> S4 = "String4".
"String4"
38> L1 = [ S1, S2 ].
["String1","String2"]
39> L2 = L1 ++ [ S3 ].
["String1","String2","String3"]
40> L3 = L2 ++ [ S4 ].
["String1","String2","String3","String4"]
(使用 '++' 等效于 lists:append )。
在第一个示例中 - 仅创建了 2 个列表实例。在第二个 - 3个实例中。在更大的示例中,结果应该是2 个列表实例与 N-1 个实例