避免在Lua中从一张表中两次取出同一个值。

我有这个脚本...

x={300, 450}
y={100, 160}

ui.addTextArea(2, "<br/><vP><b><p align='center'><a href='event:yes'>Yes</a></b></p>", x[math.random(#x)], y[math.random(#y)];
ui.addTextArea(3, "<br/><R><b><p align='center'><a href='event:no'>No</a></b></p>", x[math.random(#x)], y[math.random(#y)];
ui.addTextArea(4, "<br/><VP><b><p align='center'><a href='event:yes'>Yes</a></b></p>", x[math.random(#x)], y[math.random(#y)];
ui.addTextArea(5, "<br/><R><b><p align='center'><a href='event:no'>No</a></b></p>", x[math.random(#x)], y[math.random(#y)]);

其中 x 和 y 是 TextArea 的坐标,但是我总是得到相同的坐标用于超过 2 个的 textAreas(例如,我得到 x=300 和 y=100 的坐标用于第 3 和 5 个 textAreas)。

有没有办法避免这个问题?比如说,一旦一个值被使用,就被跳过,不能再次使用/选择。

不确定我如何更好地解释它...

点赞
用户3629357
用户3629357
x={300, 450}
y={100, 160}

xy = {}
for _, X in ipairs(x) do
  for _, Y in ipairs(y) do
    table.insert(xy, {X, Y})
  end
end

ui.addTextArea(2, "<br/><vP><b><p align='center'><a href='event:yes'></a></b></p>", unpack(table.remove(xy, math.random(#xy))));
ui.addTextArea(3, "<br/><R><b><p align='center'><a href='event:no'></a></b></p>",    unpack(table.remove(xy, math.random(#xy))));
ui.addTextArea(4, "<br/><VP><b><p align='center'><a href='event:yes'></a></b></p>", unpack(table.remove(xy, math.random(#xy))));
ui.addTextArea(5, "<br/><R><b><p align='center'><a href='event:no'></a></b></p>",    unpack(table.remove(xy, math.random(#xy)))); 
2014-05-14 13:00:55
用户869951
用户869951

最简单的方法是使用一个函数,在使用时从表格中移除项目。除非我误解了你想做的事情,否则你需要有多少个文本框就拥有多少个 x 和 y 值。因此,请尝试以下操作:

local x = {100, 200, 300, 400, 500} -- 五个文本框
local y = {100, 200, 300, 400, 500} -- 五个文本框

local function randomExtract(tbl)
    if #tbl > 0 then
      local index = math.random(#tbl)
      return table.remove(tbl, index)
    end
end

ui.addTextArea(1, "<br/>...</p>", randomExtract(x), randomExtract(y))
ui.addTextArea(2, "<br/>...</p>", randomExtract(x), randomExtract(y))
...
ui.addTextArea(5, "<br/>...</p>", randomExtract(x), randomExtract(y))
2014-05-14 14:28:57