Erlang - 列表推导式 - 填充记录
我有一个简单的记录结构,由标题 (H) 和数据行列表 (D) 1:N 组成。所有标题行必须以数字开头。所有数据行都有一个前导空格。其间还可能存在一些必须忽略的空行 (E)。
L = [H, D, D, E, H, D, E, H, D, D, D].
我想创建一个记录列表:
-record(posting,{header,data}).
使用列表理解。最好的方法是什么?
I have a simple record structure consisting of a header (H) and a list of the data lines (D) 1:N. All header lines must start with a digit. All data lines have a leading whitespace. There also might be some empty lines (E) in between that must be ignored.
L = [H, D, D, E, H, D, E, H, D, D, D].
I would like to create a list of records:
-record(posting,{header,data}).
using list comprehension. Whats the best way to do it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在这种情况下,您必须使用lists:foldl/3 而不是列表推导式。使用foldl/3,您可以通过整个列表L累积标题和数据的值。
You must use lists:foldl/3 instead of list comprehensions in this case. With foldl/3 you can accumulate values of header and data through whole list L.
你应该这样做:
无论如何,我认为简单的 Erlang 版本似乎不太复杂,而且应该更快一点。
编辑:如果您必须添加更好的行分类或解析,那么添加新函数会更好,因为它可以提高可读性。
您可以这样使用它:
尾递归本机 Erlang 解决方案:
我认为从性能角度来看没有理由使用尾递归:
...以及许多其他变体。
You should do something like this:
Anyway I think that straightforward Erlang version doesn't seems too complicated and should be little bit faster.
Edit: If you have to add better row classification or parsing, adding new function is better because it improves readability.
You can use it like this:
Tail recursive native Erlang solution:
I think that there is no reason use tail recursion from performance point of view:
... and many many other variants.
我需要折叠标题下方的所有数据行 - 所以目前这是我所拥有的:
I needed to collapse all Data lines beneath the header - so for the moment here is what I have: