lua table操作、运算
来源:学生作业帮 编辑:神马作文网作业帮 分类:英语作业 时间:2024/10/01 09:41:19
lua table操作、运算
第一次随机取1至9中的4个,第二次随机取剩下的5个中的3个,第三次再取与第二次不重复的4个,以此类推.
第一次随机取1至9中的4个,第二次随机取剩下的5个中的3个,第三次再取与第二次不重复的4个,以此类推.
你是说 第三次 再取 和 第一次 不重复的 4个
----------------------------------------
-- func
----------------------------------------
function init_array(n, start)
start = start or 1
local arr = {}
for i = start, n do
arr[i] = i
end
return arr, #arr
end
-- 返回从数组随机抽取的集合
function get_array_randpick(arr, n)
local a = {}
for key, var in pairs(arr) do
a[key] = var
end
local t = {}
local max = #a
for i = 1, n do
local x = math.random(1, max)
table.insert(t, a[x])
a[x] = a[max]
a[max] = nil
max = max - 1
end
return t, a
end
--- 计算两个数组的差异
-- @return 数组1中与数组2不相同的元素, 相同的元素
function get_array_diff(arr, arr_other)
assert(type(arr) == "table" and type(arr_other) == "table")
local ht_other = {}
for i, unit in ipairs(arr_other) do
ht_other[unit] = true
end
local t_diff = {}
local t_same = {}
for i, unit in ipairs(arr) do
if ht_other[unit] then
table.insert(t_same, unit)
else
table.insert(t_diff, unit)
end
end
return t_diff, t_same
end
function print_arr(arr, name)
name = name or "aArray"
print(name.." = {")
for i, var in ipairs(arr) do
print(string.format(" [%d] = %s", i, tostring(var)))
end
print "}"
end
----------------------------------------
-- test
----------------------------------------
local curtime = os.time()
math.randomseed(curtime)
math.random()
----------------------------------------
-- main
----------------------------------------
local function main()
local arr_org, len = init_array(9)
local arr_next = arr_org
local arr_last_pick = {}
local loop_max_times = 1000
for i = 1, loop_max_times do
local arr_pick1, arr_other1 = get_array_randpick(arr_next, 4)
arr_next = get_array_diff(arr_org, arr_pick1)
local arr_pick2, arr_other2 = get_array_randpick(arr_next, 3)
if i < 10 then
print_arr(arr_pick1, string.format("loop[%d].pick1 = ", i))
print_arr(arr_pick2, string.format("loop[%d].pick2 = ", i))
end
local _, t_same = get_array_diff(arr_pick1, arr_pick2)
assert(#t_same == 0)
local _, t_same = get_array_diff(arr_pick1, arr_last_pick)
assert(#t_same == 0)
arr_last_pick = arr_pick1
end
print("\nok")
end
main()
再问: 不好意思,我表达有误。。其实是,第三次和第二次不重复,取了第二次之后,第一次取的放回table中。 谢谢这位大哥的耐心解答!
----------------------------------------
-- func
----------------------------------------
function init_array(n, start)
start = start or 1
local arr = {}
for i = start, n do
arr[i] = i
end
return arr, #arr
end
-- 返回从数组随机抽取的集合
function get_array_randpick(arr, n)
local a = {}
for key, var in pairs(arr) do
a[key] = var
end
local t = {}
local max = #a
for i = 1, n do
local x = math.random(1, max)
table.insert(t, a[x])
a[x] = a[max]
a[max] = nil
max = max - 1
end
return t, a
end
--- 计算两个数组的差异
-- @return 数组1中与数组2不相同的元素, 相同的元素
function get_array_diff(arr, arr_other)
assert(type(arr) == "table" and type(arr_other) == "table")
local ht_other = {}
for i, unit in ipairs(arr_other) do
ht_other[unit] = true
end
local t_diff = {}
local t_same = {}
for i, unit in ipairs(arr) do
if ht_other[unit] then
table.insert(t_same, unit)
else
table.insert(t_diff, unit)
end
end
return t_diff, t_same
end
function print_arr(arr, name)
name = name or "aArray"
print(name.." = {")
for i, var in ipairs(arr) do
print(string.format(" [%d] = %s", i, tostring(var)))
end
print "}"
end
----------------------------------------
-- test
----------------------------------------
local curtime = os.time()
math.randomseed(curtime)
math.random()
----------------------------------------
-- main
----------------------------------------
local function main()
local arr_org, len = init_array(9)
local arr_next = arr_org
local arr_last_pick = {}
local loop_max_times = 1000
for i = 1, loop_max_times do
local arr_pick1, arr_other1 = get_array_randpick(arr_next, 4)
arr_next = get_array_diff(arr_org, arr_pick1)
local arr_pick2, arr_other2 = get_array_randpick(arr_next, 3)
if i < 10 then
print_arr(arr_pick1, string.format("loop[%d].pick1 = ", i))
print_arr(arr_pick2, string.format("loop[%d].pick2 = ", i))
end
local _, t_same = get_array_diff(arr_pick1, arr_pick2)
assert(#t_same == 0)
local _, t_same = get_array_diff(arr_pick1, arr_last_pick)
assert(#t_same == 0)
arr_last_pick = arr_pick1
end
print("\nok")
end
main()
再问: 不好意思,我表达有误。。其实是,第三次和第二次不重复,取了第二次之后,第一次取的放回table中。 谢谢这位大哥的耐心解答!
lua环境变量问题.我的环境变量LUA_PATH为";;C:\Program Files\Lua\5.1\lua\?.l
excel表格的基本操作中的运算
catia中布尔运算如何操作
table
汇编 用文件操作的矩阵乘法运算
怎样操作折弯机?折弯机有哪些运算方式?
计算器能不能取余数 (mod运算)?怎么操作?
matlab 中怎样用向量运算代替循环操作
求大神写一个太阳神三国杀的lua
单片机 CLR CLR A;是运算指令对字节操作?为什么不能用来操作位?比如说:CLR Acc.1等等
arcgis基本操作找不到open attibutes table,在哪啊?在arcgis中如何将经纬度转换为投影坐标系
怎么打数学运算符号.在键盘上如何正确输入数学运算符号,请写出操作步骤.