Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 从表中获取一个值并将其分配给另一个值,无需重复_Random_Lua_Lua Table_Garrys Mod - Fatal编程技术网

Random 从表中获取一个值并将其分配给另一个值,无需重复

Random 从表中获取一个值并将其分配给另一个值,无需重复,random,lua,lua-table,garrys-mod,Random,Lua,Lua Table,Garrys Mod,具体来说,这是为加里的国防部,但我不认为这在这个问题太重要。我想做的是得到一个玩家,并将其值设置为另一个随机玩家(因此每个玩家都有一个随机的“目标”)。我希望这样做没有重复,这样一个球员就不会被分配给他们自己。为了更好地说明: 这张图片唯一的区别是,我希望每个玩家都被分配给另一个随机玩家,所以更像player1=>player5,player3=>player2,等等 这是我目前的代码,但这总是会导致一个人未点击: validTargets = {} TargetList = {} loca

具体来说,这是为加里的国防部,但我不认为这在这个问题太重要。我想做的是得到一个玩家,并将其值设置为另一个随机玩家(因此每个玩家都有一个随机的“目标”)。我希望这样做没有重复,这样一个球员就不会被分配给他们自己。为了更好地说明:

这张图片唯一的区别是,我希望每个玩家都被分配给另一个随机玩家,所以更像player1=>player5,player3=>player2,等等

这是我目前的代码,但这总是会导致一个人未点击:

validTargets = {}
TargetList = {}

local Swap = function(array, index1, index2)
    array[index1], array[index2] = array[index2], array[index1]
end

GetShuffle = function(numelems)
    local shuffle = {}
    for i = 1, numelems do
        shuffle[#shuffle + 1] = i
    end
    for ii = 1, numelems do
        Swap(shuffle, ii, math.random(ii, numelems))        
    end
    return shuffle
end

function assignTargets()
    local shuffle = GetShuffle(#playing)
    for k,v in ipairs(shuffle) do
        TargetList[k] = v
    end

    SyncTargets()
end

function SyncTargets()
    for k,v in pairs(TargetList) do
        net.Start("sendTarget")
            net.WriteEntity(v)
        net.Send(k)
    end
end

我有一个lua函数,在给定
n
的情况下,它会生成从1到
n
的随机数字乱序。 该方法基于生成元素数组的随机排列

您可以尝试这样使用:

local Swap = function(array, index1, index2)
    array[index1], array[index2] = array[index2], array[index1]
end


GetShuffle = function(numelems)
    local shuffle = {}
    for i = 1, numelems do
        shuffle[#shuffle + 1] = i
    end
    for ii = 1, numelems do
        Swap(shuffle, ii, math.random(ii, numelems))        
    end
    return shuffle
end

function assignTargets()
    local shuffle = GetShuffle(#playing) --assuming `playing` is a known global
    for k,v in ipairs(shuffle) do
        TargetList[k] = v
    end
end

好吧,我有点傻。在我自己的示例中,您能帮助我使用这个吗?假设您每次都要更新
TargetList
,函数
assignTargets
执行与您的
assignTargets
相同的操作:在调用
assignTargets
之后,
TargetList
将被玩家分配的新随机洗牌填充。所以我只是把这个而不是我的代码放进去?我需要改变什么吗?抱歉-这里是super noob。我刚刚尝试了代码,得到了“尝试调用全局‘交换’”。这不是默认函数吗?是的,抱歉,没有意识到我还有另一个函数。但是刚刚编辑了我的答案。