LUA - 从表中选择一定数量的物品不重复

所以我现在在做一个小项目,这是我第一次学习 LUA,目前我卡住了。我想做的是创建一个函数,它会随机选择1和5之间的两个数字,并使它们不能与玩家碰撞。我似乎无法随机选择两个不同的数字。我一直在寻找答案,但没有找到明确的答案。任何帮助都将不胜感激!

我的代码如下:

local function RandomChoice1()
    local t = {workspace.Guess1.CB1,workspace.Guess1.CB2,workspace.Guess1.CB3,workspace.Guess1.CB4,workspace.Guess1.CB5}
    local i = math.random(1,5)

end

原文链接 https://stackoverflow.com/questions/71303557

点赞
stackoverflow用户1442917
stackoverflow用户1442917

如果你需要以20%的概率选择一个数字(来自1..5的范围),并以25%的概率选择第二个数字(来自1..5但不包括第一个选择的数字),那么可以用类似如下代码实现:

local i1 = math.random(1,5) -- 从1..5范围内随机选择一个数字
-- 将区间上移以考虑已选数字
local i2 = math.random(2,5) -- 从2..5范围内随机选择一个数字
-- 如果出现冲突,则设为1
if i2 == i1, then i2 = 1 end

这将确保两个数字不同且符合你的要求。

2022-03-01 04:53:38
stackoverflow用户1847592
stackoverflow用户1847592

你可以生成 i2 - i1 的差值,而不是生成 i2

local i1 = math.random(5)   -- 从 1..5 的间隔中随机选择一个数字
local diff = math.random(4) -- 从 1..4 的间隔中随机选择一个数字
local i2 = (i1 + diff - 1) % 5 + 1  -- 从 1..5 的间隔中选择与 i1 不同的数字
print(i1, i2)
2022-03-01 05:32:31
stackoverflow用户18287276
stackoverflow用户18287276

你可以使用递归方法。保存前一个数,如果和当前生成的数相同,就继续生成新的数,直到不同为止。这样可以保证不会出现相同的数。

local i = 0;

function ran(min,max)
 local a = math.random(min,max);

  if (a == i) then
    return ran(min,max);
  else
    i = a;
    return a;
  end
end
2022-03-02 10:16:16
stackoverflow用户11740758
stackoverflow用户11740758

“2 from 5” 且不重复...

local t = {}

for i = 1, 5 do
  t[i] = i
end

-- 从此,使用简单的 table.remove()...
-- (table.remove() 函数返回移除的键/值对的值,)
-- ...在一个随机键上避免重复

for i = 1, 2 do
  print(table.remove(t, math.random(#t)))
end

示例输出...

1
4
2022-03-02 12:30:26