将字符串重新分配给数组中的一组值列表

Posted

技术标签:

【中文标题】将字符串重新分配给数组中的一组值列表【英文标题】:Reassigning strings to a set list of values in an array 【发布时间】:2019-11-25 09:51:12 【问题描述】:

我有一个固定格式的 Lua 列表(它是来自其他地方的输入)。

例如

a = "apple", "apple 1", "pear", "orange", "orange 3", "kiwi", "tomato"

我还有一个查找表,我想在其中规范化这个集合并将它们发送到代码格式。注意:任何包含苹果的东西,比如苹果 1、苹果 2 等都会被映射到与苹果相同的值。

例如

"apple" => "RD"
"pear" => "GR"
"orange" => "OG"
"kiwi" => "GR"
"tomato" => "RD"
"banana" => "YL"
etc...

然后我想返回一个包含所有这些替换的列表:

fruitBox = "RD", "GR", "OG"

我不介意fruitBox 是否有重复值,不管是最简单的,但它应该只返回值,如果它们在查找和原始列表中都有表示。我一直在尝试这样做,但要匹配字符串,但我总是陷入如何输出代码的困境。我还尝试了string.gsub 并迭代了for loop,但仍然没有用处。

【问题讨论】:

【参考方案1】:

您需要将映射列表存储在(哈希)表中,并使用第二个表中的映射来迭代第一个列表以更改元素。像这样的东西应该可以工作:

local a = "apple", "pear", "orange", "kiwi", "tomato"
local map = 
  apple = "RD",
  pear = "GR",
  orange = "OG",
  kiwi = "GR",
  tomato = "RD",
  banana = "YL",

for index = 1, #a do
  a[index] = map[a[index]] or "missing mapping"
end

-- print results
for index = 1, #a do print(a[index]) end

这将为我打印RD GR OG GR RD

如果您真的想跳过映射中不存在的元素(我不建议这样做,因为很难在映射或数据中找到错误),然后使用单独的表并在循环中执行 table.insert 而不是 a[index]... 赋值。

如果字符串有一些非字母(如更新的问题中所示),您可能需要使用 gsub("%A","") 或类似的东西将其删除。

【讨论】:

非常感谢 - 你!但是,如果字符串中包含数字,则它不起作用,这对我的问题至关重要。已编辑问题以添加此内容。 已添加:for i = 1, #a do a[i] = a[i]:gsub("%A","") end 工作正常。如果您有更简洁的解决方案,请随时添加到您的答案中:) @Bee,这是一个有效的评论,但它与问题无关,只会使答案复杂化,所以让我们保持原样。 正如我所提到的,我确实修改了答案,因为它对我试图做的事情非常重要。你我对你的回答的另一个修改是实际上将它作为一个表格返回,正如原来的问题所指定的那样。无论如何,感谢您的帮助。

以上是关于将字符串重新分配给数组中的一组值列表的主要内容,如果未能解决你的问题,请参考以下文章

C++ 在 Map 中的类的一组值中插入一个值

检查数组是不是至少包含 PHP 中的一组值

将一组值映射到百分比

确定一个值是不是在 Java 中的一组值中的最快方法是啥?

如何从给定的一组值中进行选择,四舍五入?

用R中的组中的非NA字符替换一组值的NA [重复]