在 Erlang 中将列表拆分为相同大小的块

2023-12-23

我想分割:

[1,2,3,4,5,6,7,8]

into:

[[1,2],[3,4],[5,6],[7,8]]

它通常适用于:

[ lists:sublist(List, X, 2) || X <- lists:seq(1,length(List),2) ] .

但这样确实很慢。在我的上网本上,10000 个元素需要惊人的 2.5 秒。我还编写了一个非常快的递归函数,但我只是感兴趣:这个列表理解是否也可以用不同的方式编写,以便它更快?


尝试这个:

part(List) ->
        part(List, []).
part([], Acc) ->
        lists:reverse(Acc);
part([H], Acc) ->
        lists:reverse([[H]|Acc]);
part([H1,H2|T], Acc) ->
        part(T, [[H1,H2]|Acc]).

在 erlang-shell 中测试(我已经在模块中声明了这个函数part):

2> part:part([1,2,3,4,5,6,7,8]).
[[1,2],[3,4],[5,6],[7,8]]
3> 
3> timer:tc(part, part, [lists:seq(1,10000)]).
{774,
 [[1,2],
  [3,4],
  [5,6],
  [7,8],
  "\t\n","\v\f",
  [13,14],
  [15,16],
  [17,18],
  [19,20],
  [21,22],
  [23,24],
  [25,26],
  [27,28],
  [29,30],
  [31,32],
  "!\"","#$","%&","'(",")*","+,","-.","/0","12","34",
  [...]|...]}

仅 774 微秒(约 0.8 毫秒)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Erlang 中将列表拆分为相同大小的块 的相关文章

随机推荐

  • byte[] 数组上的 GetHashCode()

    什么是GetHashCode 调用时计算byte 大批 具有相同内容的 2 个数据数组不提供相同的哈希值 NET 中的数组不会覆盖Equals or GetHashCode 因此您将获得的值基本上基于引用相等性 即默认实现Object 为了
  • 等待动画、渲染完成 - XAML 和 C#

    我遇到的情况是 我正在对 XAML 应用程序的一部分进行动画处理 并且我需要等待动画和渲染完成 然后才能继续编写代码 到目前为止 我的函数的尾部如下所示 ProcExpandCollapse Begin while ProcExpandCo
  • SQL-如何选择具有最大值的列的行[重复]

    这个问题在这里已经有答案了 date value 18 5 2010 1 pm 40 18 5 2010 2 pm 20 18 5 2010 3 pm 60 18 5 2010 4 pm 30 18 5 2010 5 pm 60 18 5
  • Laravel 如何检查验证唯一表两个字段

    我有 tableA 有 2 个字段 1 song id 2 playlist id 我想检查 laravel 验证独特的功能 示例 我已插入数据 id gt 1 song id gt 2 playlist id gt 34 然后我必须再次插
  • 仅删除给定字符串中的第一个单词

    我正在尝试从给定字符串中删除第一个单词 到目前为止我已经完成了 word removeMe meow whatever needle removeMe haystack To replace with word str replace ne
  • 同一域中 IE9 中的 Script5 访问被拒绝

    我正在 django 中开发一个网站 它使用 jquery 多文件上传插件 当我注册到我的网站时 一封确认电子邮件会发送到我的 Gmail 帐户 我单击激活链接 我的网站将在新选项卡中打开 我登录 然后尝试上传文件 但在 IE9 中失败 F
  • Rcpp:错误:与请求的类型不兼容

    我有这个 C 代码 include
  • 独特的词典列表

    假设我有一个字典列表 id 1 name john age 34 id 1 name john age 34 id 2 name hanna age 30 如何获取唯一词典的列表 删除重复项 id 1 name john age 34 id
  • 源更改时如何重建 Node.js 插件

    我有一个 node js 应用程序 并且创建了一个本机插件 如果您需要背景信息 可以创建 Node js 的本机插件像这样 https nodejs org api addons html 在我的开发环境中 我希望它监视源文件 在本例中是
  • 在 RelaxNG 中将元素定义为非空

    我已经开始使用 RelaxNG 来指定 XML 消息模式 并使用 PHP DOMDocument 来验证和解析传入消息 但无法弄清楚如何定义文本节点以使其不能为空 示例架构
  • Phonegap Android 文件传输错误代码 3

    我正在开发 Android 移动应用程序 它使用 Dave Johnson 的 Facebook Connect 插件 https github com davejohnson phoneg https github com davejoh
  • 如何对二维列表进行排序? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有以下类型的列表 lst 1 0 23 2 0 39 4 0 31 5 0 27 我想按第二列的降序对其进行排序 我尝试过内置sorte
  • 在 Coldfusion / Apache POI 中强制完整计算整个工作簿

    给定一个工作簿 其中包含由以下方法生成的跨表公式Coldfusion 9 via Apache POI 我想以编程方式强制整个工作簿进行 通过依赖树重建进行完整计算 before将工作簿保存到磁盘 So that when my end u
  • 我无法使用模式来使用像“abc_def”这样的组名称

    我对必须编译的一系列模式有疑问 这是一个例子
  • 如何外部化 maven-checkstyle-plugin 的 checkstyle 配置

    我试图让 maven checkstyle plugin 对我们的所有项目使用相同的配置文件 我尝试了几种方法 但没有一种有效 似乎唯一有效的是当我将配置文件放在我的 maven project 的根目录中 然后在 pom xml 中使用该
  • 我不确定为什么决策树和随机森林显示 100% 的准确率?

    我目前正在研究一个模型 该模型可以读取结构化数据并确定某人是否患有疾病 我认为问题在于数据没有在训练数据和测试数据之间分开 我不知道我怎样才能做到这一点 我不知道该尝试什么 import pandas as pd import numpy
  • phpUnit中createMock和getMockBuilder有什么区别?

    为了我一生的挚爱 我无法弄清楚两者之间的区别createMock type and getMockBuilder type 我正在查看原始文档 只有一行我不明白 您可以使用 getMockBuilder type 方法来自定义测试双精度生成
  • 监控磁盘读/写活动

    有没有办法使用 python 获取当前磁盘加载 我使用 psutil 来获取 CPU 和 RAM 使用情况 psutil cpu percent and psutil virtual memory used 但我不知道如何获取有关硬盘的此类
  • 交替表行颜色,但有 2 行数据

    我已经为斑马条纹设置了表格 但是如何实现使行颜色交替为 2 行而不是单行 我的数据标记如下所示 tr td task TaskNum td td task RepiarTime td td Priority Club td td SD td
  • 在 Erlang 中将列表拆分为相同大小的块

    我想分割 1 2 3 4 5 6 7 8 into 1 2 3 4 5 6 7 8 它通常适用于 lists sublist List X 2 X lt lists seq 1 length List 2 但这样确实很慢 在我的上网本上 1