将字符串重新分配给数组中的一组值列表
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,这是一个有效的评论,但它与问题无关,只会使答案复杂化,所以让我们保持原样。
正如我所提到的,我确实修改了答案,因为它对我试图做的事情非常重要。你我对你的回答的另一个修改是实际上将它作为一个表格返回,正如原来的问题所指定的那样。无论如何,感谢您的帮助。以上是关于将字符串重新分配给数组中的一组值列表的主要内容,如果未能解决你的问题,请参考以下文章