如何按确切的顺序迭代表?

2023-12-09

如果我尝试输出此表,它们将以错误的顺序循环:

local letters   =   {DIN1="hi", AIN1= "my", AIN2 ="name", DIN2="is"}

for name, value in pairs(letters) do
    print(name,value)
end

预期输出:

DIN1   hi
AIN1   my
AIN2    name
DIN2   is

Output:

AIN1    my
DIN2    is
DIN1    hi
AIN2    name

我如何编码以便 for 循环遍历表的实际顺序? (定义的顺序)

编辑:我不需要字母顺序,但需要与表定义中的顺序相同。

编辑:我需要打印密钥和值。在答案“Lua inpairs with same order as it's write”中,只会打印索引号和值


您可以利用表的整数部分按顺序存储键:

function add(t, k, v, ...)
    if k ~= nil then
        t[k] = v
        t[#t+1] = k
        return add(t, ...)
    end
    return t
end

t = add({ }, "A", "hi", "B", "my", "C", "name", "D", "is")

for i,k in ipairs(t) do
    local v = t[k]
    print(k, v)
end

当然,这假设整数键不被任何东西使用,除了add.

insert(t, k, v) and remove(t, k)留给读者作为练习。

编辑: 省略号(点)add函数允许根据需要传递尽可能多的参数来一次设置多个 kv 对。如果没有这个,我们每次调用只能设置一对,比如add(t, "A", "hi")。函数定义add(t, k, v, ...)将前三个参数分配给t, k, v并且不影响其他人。然后add处理第一对(t[k]=v)并与其余部分递归...的论点。

          t   k    v    ...
level 1: (t, "A", "hi", "B", "my", "C", "name", "D", "is")
level 2: (t,         <- "B", "my", "C", "name", "D", "is")
level 3: (t,                    <- "C", "name", "D", "is")
level 4: (t,                                 <- "D", "is")
level 5: (t,                                          <- )

在5级时,k and v take nils,因为参数列表太短,递归停止。

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

如何按确切的顺序迭代表? 的相关文章

  • cat/Xargs/命令 VS for/bash/命令

    Linux 101 Hacks 一书的第 38 页建议 cat url list txt xargs wget c 我通常这样做 for i in cat url list txt do wget c i done 除了长度之外 还有什么东
  • 中断/退出嵌套在 vb.net 中

    如何摆脱 vb net 中的嵌套 for 或循环 我尝试使用 exit for 但它只跳转或中断了一个 for 循环 我怎样才能做到以下几点 for each item in itemList for each item1 in itemL
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • Lua 中的贪婪/非贪婪模式匹配和可选后缀

    在 Lua 中 我正在尝试模式匹配和捕获 384 Critical Strike Reforged from Parry Chance as 384 Critical Strike 后缀在哪里 Reforged from s 是可选的 长版
  • 如何从 Lua 字符串中删除所有特殊字符、标点符号和空格?

    在Lua中 我只能找到其他语言的示例 如何从字符串中删除所有标点符号 特殊字符和空格 所以 举例来说 s t r i p p e d会成为stripped In Lua 模式 https www lua org manual 5 3 man
  • 使用两个 for 循环计算字符串中的字母

    我必须读取字符串 hello world 并仅使用 for 循环输出每个字母的频率 讲师暗示我需要使用两个循环 并为我们提供了以下代码来开始 int ch count for ch a ch lt z ch count the number
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 如何循环遍历关联数组并获取密钥?

    我的关联数组 arr array 1 gt Value1 2 gt Value2 10 gt Value10 使用以下代码 v充满了 arr的价值观 foreach arr as v echo v Value1 Value2 Value10
  • Java 字节码中循环的检测 - 区分后沿类型

    背景 在提出问题之前 我想声明我已检查以下链接 识别java字节码中的循环 https stackoverflow com questions 6792305 identify loops in java byte code Java 字节
  • 为什么for循环只显示最后一个循环的结果

    我有这个样本矩阵 X1 X2 X3 X4 1 F F F F 2 C C C C 3 D D D D 4 A A A A 我正在尝试使用 for 循环来获取每列中唯一音高的数量 我正在尝试这样做 y lt read csv file fra
  • 为什么在我的例子中 For 循环比 Map、Reduce 和 List 理解更快

    我编写了一个简单的脚本来测试速度 这就是我发现的结果 实际上 for 循环在我的例子中是最快的 这真的让我感到惊讶 请查看下面 正在计算平方和 这是因为它在内存中保存列表还是有意为之 谁能解释一下这一点 from functools imp
  • 搜索字符串是否有一个字符不同

    我试图确定输入的单词是否与文本文件中的一个字符不同 我有有效的代码 但不幸的是仅适用于两个字符或更少的单词 这显然不是很有用 而且代码本身看起来有点混乱 这是我到目前为止所拥有的 if random length word length f
  • 遍历/循环 XSL 键:如何?

    有没有办法遍历一个键并输出它包含的所有值
  • lua-socket:unix 域套接字?

    我使用的是 lua socket 3 0rc1 3 Ubuntu Trusty 附带的 和 lua 5 1 我正在尝试监听 unix 域套接字 我能找到的唯一示例代码是this http lua users org lists lua l
  • R 中带有文件名的 For 循环

    我有一个文件列表 例如 nE pT sbj01 e2 2 csv nE pT sbj02 e2 2 csv nE pT sbj04 e2 2 csv nE pT sbj05 e2 2 csv nE pT sbj09 e2 2 csv nE
  • 根据javascript中对象数组中的id替换特定对象

    我有一系列像这样的对象 var books id 1 name Name of the wind year 2015 rating 4 5 author 2 现在我有一个函数 editBooks 它要求用户提供 id 并用用户给出的值替换具
  • 互补DNA序列

    我在编写这个循环时遇到问题 它似乎在第二个序列之后停止了 我想返回给定 DNA 序列的互补 DNA 序列 例如 AGATTC gt TCTAAG 其中 A T 和 C G def get complementary sequence dna
  • 计算 for 循环期间的运行总计 - Python

    编辑 下面是我根据收到的反馈 答案编写的工作代码 这个问题源于我之前使用 MIT 的开放课件学习 Python CS 时提出的问题 在这里查看我之前的问题 https stackoverflow com questions 4990159
  • Pandas:向量化局部范围操作([i:i+2] 行的最大值和总和)

    我希望在数据帧中的每一行的局部范围内进行计算 同时避免速度缓慢for环形 例如 对于下面数据中的每一行 我想找到未来 3 天内 包括当天 的最高气温以及未来 3 天内的总降雨量 Day Temperature Rain 0 30 4 1 3
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print

随机推荐

  • 如何以另一种形式调用PHP中的函数?

    我有一个带有名字的页面1 php里面有一个功能 现在我想调用该函数2 php在 PHP 2 中 我写了func 这个函数在1 php 但它有这个错误 Fatal error Call to undefined function func i
  • 如何以编程方式在 Selenium Jupiter 的基类中配置 WebDriver?

    我想将基于 JUnit 4 的现有 Selenium 测试迁移到 JUnit 5 为此 我想利用硒 木星 测试必须满足的一项要求是 能够在运行时切换 WebDriver 实现 基于执行环境 使用所有测试的一个公共基类 在开发人员计算机 Wi
  • Eclipselink 支持包含正则表达式的查询吗?

    我已经看到像 MySQL 这样的 DBMS 支持包含正则表达式的查询 Eclipselink 支持这个吗 我必须检索具有与某些正则表达式匹配的某些字符串属性的实体 SELECT X FROM Person X WHERE X name
  • Phoenix.ActionClauseError at POST,没有匹配的操作子句来处理请求

    每当我发布到 api subastas 时 我都会收到此错误 Phoenix ActionClauseError at POST api subastas bad request to IascSubastas SubastaControl
  • 将 Python 列表和字典理解与计数器结合起来

    我想传输元组列表 1 3 5 2 4 6 7 8 9 到一个列表dict 为了创建一个 pandas 数据框 如下所示 index 1 match 1 index 1 match 3 index 1 match 5 index 2 matc
  • Android上从网页启动流媒体音频播放器的方法

    要链接到 SHOUTcast HTTP 互联网广播流 传统上您会链接到播放列表文件 例如 M3U 或 PLS 从那里 浏览器将启动注册来处理播放列表的音频播放器 这适用于任何 PC Palm Blackberry 和 iPhone 这个方法
  • 如何在对数图中设置双轴刻度

    在我的图中 辅助 x 轴用于显示某些数据的另一个变量的值 现在 原始轴已按对数缩放 不幸的是 孪生轴将刻度 和标签 放置在原始轴的线性刻度上 而不是按照对数刻度 如何克服这个问题 这里的代码示例应该将孪生轴的刻度放在与原始轴相同的 绝对轴
  • 如何使 scanf 有选择地忽略其转换说明符之一?

    char value1 10 int value2 int value3 0 if scanf s d d value1 0 value2 value3 scanf s d value1 0 value2 我正在尝试使用scanf插入 3
  • 使用zxing进行QR码编码和解码

    好吧 所以我要打消这里有人以前使用过 zxing 的可能性 我正在开发一个Java应用程序 它需要做的一件事是将数据的字节数组编码为QR码 然后稍后对其进行解码 这是我的编码器的示例 byte b 0x48 0x45 0x4C 0x4C 0
  • 检查值是否存在于多维数组java中

    没有for loop 有什么方法可以查看 a 中是否存在某个值multidimensional array 我发现 Arrays asList ArrayName contains itemToFind 但这只会搜索数组的第一个维度 而我需
  • 如何检查 Template Haskell 中引用的数据构造函数名称?

    我正在尝试学习一些 Haskell 模板 作为练习 我编写了一个可以生成类似内容的函数isLeft and isRight 灵感来自这个问题 这是我的卑微尝试 isA connam do ConE nam lt connam nn lt n
  • jqgrid中如何删除行

    在我的 jqgrid 中 我有一个图标 当我单击它时 我必须调用 ajax 函数来删除数据库中的数据 这是代码 function loadnotespese clienti navgrid jqGrid colNames Tipo spes
  • 我如何检查是否没有给出参数[重复]

    这个问题在这里已经有答案了 我想检查用户是否给了脚本任何参数 如果是这种情况 脚本应该关闭 if then exit fi 不管用 你可以这样尝试 if eq 0 then echo Illegal number of parameters
  • Toast 通知不起作用?

    我按照几个示例在单击应用程序中的按钮时执行 Toast 通知 我逐步完成了以下示例 http msdn microsoft com en us library windows apps xaml hh868254 aspx 我没有收到任何错
  • java.lang.NoSuchMethodError: javax.persistence.JoinColumn.foreignKey()Ljavax/persistence/ForeignKey;

    我是 Websphere 应用程序服务器的新手 请让我知道我哪里做错了 我正进入 状态java lang NoSuchMethodError javax persistence JoinColumn foreignKey Ljavax pe
  • Rails 查询两小时之间的时间戳

    我在 Ruby on Rails 中遇到问题 我需要允许用户设置两个时间列 然后查询当前时间在两个时间戳的小时内的该模型的所有实例 天数并不重要 只要在指定的开始和结束时间戳内即可 Thanks Brian 像这样的东西应该可以工作 假设M
  • Rails 5 ActionCable WebSockets 未返回状态为 101 升级响应的升级标头

    编辑 显示在最后 发现升级标头实际上已创建 我的工作地点是动作电缆示例代码库 尝试构建一个 WebSocket 应用程序 Chatty 应用程序依赖于应用程序中提供的浏览器客户端 工作正常 但是 我不会使用该客户端 因为我需要外部物联网连接
  • 计算 WiFi 带宽或 WiFi 信号强度

    我想使用 jQuery 或 JavaScript 计算 WiFi 带宽或 WiFi 信号强度 我知道我们可以在服务器端代码上计算强度 但我想在客户端上计算 检查这个网站 我认为这适合 WiFi 连接 http www wiseloop co
  • 使用 Factory 创建共享 ViewModel

    我有一个包含 3 个选项卡的 TabLayout 的文档片段 TabRulesFragment TabProceduresFragment TabGuidanceFragment 在 DocumentsFragment 中 我使用工厂初始化
  • 如何按确切的顺序迭代表?

    如果我尝试输出此表 它们将以错误的顺序循环 local letters DIN1 hi AIN1 my AIN2 name DIN2 is for name value in pairs letters do print name valu