我正在为 Lua 程序设计 UI,其中一个元素要求用户从主表中选择现有值或在该表中创建新值。
我通常会使用带有 EDITBOX = "YES" 的 IUP 列表。
但是,用户可以选择的项目数量可能达到数百甚至数千,并且在 iup 中填充列表(以及从中进行选择)时的性能慢得令人无法接受。我无法控制表格中的项目数量。
我目前的想法是创建一个带有编辑框的列表,但没有任何值。当用户在编辑框中输入内容时(可能是 2-3 个字符之后),列表将填充以输入字符开头的表格项子集。然后用户可以从列表中选择一个项目或继续键入以缩小选项或创建一个新项目。
为此,我需要能够创建一个新表,其中包含以输入字符开头的主表中的项目。
一种选择是使用 Penlight 的“startswith”函数遍历主表以创建新表:
require "pl.init"
local subtable = {} --empty result table
local startstring = "xyz" -- will actually be set by the iup control
for _, v in ipairs (mastertable) do
if stringx.startswith(v, startstring) then
table.insert(subtable,v)
end
end
但是,如果主表很大,我担心这样做的性能。有没有更有效的编码方式,或者我可以实现 UI 的不同方式?