Lua сгенерировать таблицу два столбца с неповторяющимися строками
Необходимо сгенерировать таблицу Lua c двумя значениями, которые не повторяются. Причем в таблице не должно быть строк типа (a,b) и (b,a). Такие строки будут считаться одинаковыми (a,b) = (b,a).
Есть пример (вроде пример Mike V.), который генерирует таблицу с одним столбцом неповторяющихся значений:
math.randomseed(os.time()) -- first, sets a seed for the pseudo-random generator
math.random(); math.random(); math.random();
local function my_random(t, from, to) -- second, exclude duplicates
local num = math.random (from, to)
if t[num] then num = my_random(t, from, to) end
t[num] = num
return num
end
local t = {} -- initialize table with not duplicate values
for i =1, 30 do
X = my_random (t, 1, 50)
print (i, "=" ,X)
end
Мне нужно аналогично, но два столбца (Лучше сразу в таблицу Lua загнать):
1 - 1,3
2 - 2,4
3 - 4,3
4 - ...
Заранее спасибо.
Ответы (1 шт):
Автор решения: Mike V.
→ Ссылка
попробую и тут помочь, только вы не написали какие еще ограничения есть.
Может нужны все возможные комбинации? Тогда нужно вычислить это количество по какой-то формуле и подставить вместо limit тут for i =1, limit do.
math.randomseed(os.time())
math.random();
local function random2(from, to)
return math.random (from, to), math.random (from, to)
end
local function my_random(t, from, to) -- second, exclude duplicates
local a,b = random2 (from, to)
if t[a..'_'..b] or t[b..'_'..a] then a,b = my_random(t, from, to) end
t[a..'_'..b] = {a,b}
return a,b
end
local limit = 10
local t = {}
for i =1, limit do
x,y = my_random (t, 1, limit)
print (i, "=" ,x,y)
end