修改具有特定最大值和最小值的表中的数字

我有一个基本表格,其中包含介于32和512之间的随机数字。我想能够增加和减少每个数字的值10,除非表格中的最小数字= 32或最大数字= 512。

我正在使用夹紧方法将我的数字限制在给定值,所有内容都有效,但是所有数字都将降低到最低值而不是函数暂停,如果表格中的最低数字为32。因此,它们所有都会到32或512,而不是在其中一个数字达到32或512时停止。

如果(math.mintable.unpack(sequences.c1Sequence.data))>=32math.maxtable.unpack(sequences.c1Sequence.data))<=512then
  for i,v in ipairs(sequences.c1Sequence.data)do
    sequences.c1Sequence.data [i] = util.clamp(v +(10 * d) , 32,512end
end

要澄清,“d”每次调用函数时都是1或-1,因此i = i + /-10取决于输入内容。

夹紧函数如下:

util.clamp = function(n,min,max)
  return math.min(max,(math.max(n,min)))
end

表格只是:

 data = {33,122,97,64,222,314,90,39,63,44,312,502,34,409,111,212}

或任何其他随机数字范围。

我希望当范围内的任何数字= 32或512时,函数不会做任何事情,数字将保持不变。相反,它们所有(如果函数不断接收-1很多次)都会到32或(如果函数不断获得+1)都会到512。随机性没有被保留。

干杯 :)

点赞
用户3735873
用户3735873

如果我理解你的问题正确的话,可以尝试以下代码:

local unpack = unpack or table.unpack

--------------------------------------------------------------------------------

function min(...)                       -- 返回所有元素的最小值
  local ans = select(1,...)
  if type(ans) == 'table' then ans = min(unpack(ans)) end
  for _,n in ipairs { select(2,...) } do
    if type(n) == 'table' then n = min(unpack(n)) end
    if n < ans then ans = n end
  end
  return ans
end

--------------------------------------------------------------------------------

function max(...)                       -- 返回所有元素的最大值
  local ans = select(1,...)
  if type(ans) == 'table' then ans = max(unpack(ans)) end
  for _,n in ipairs { select(2,...) } do
    if type(n) == 'table' then n = max(unpack(n)) end
    if n > ans then ans = n end
  end
  return ans
end

--------------------------------------------------------------------------------

function pt(t)
  print('{'..table.concat(t,', ')..'}')
end

--------------------------------------------------------------------------------

function adjust(t,val)
  if min(t)+val < 32 or max(t)+val > 512 then return t end
  local ans = {}
  for _,x in ipairs(t) do
    ans[#ans+1] = x+val
  end
  return ans
end

--==============================================================================
-- 测试
--==============================================================================

data = {33, 122, 97, 64, 222, 314, 90, 39, 63, 44, 312, 502, 34, 409, 111, 212}

pt(data)                      --原始数据

data=adjust(data,-1)
pt(data)

data=adjust(data,-1)
pt(data)

data=adjust(data,10)
pt(data)

data=adjust(data,1)
pt(data)

data=adjust(data,1)
pt(data)
2019-05-11 23:19:28
用户7396148
用户7396148

我认为你只需要将比较操作符改成 ~= 就可以了。

data = {33, 122, 97, 64, 222, 314, 90, 39, 63, 44, 312, 502, 34, 409, 111, 212}

clamp = function(n, min, max)
  return math.min(max,(math.max(n,min)))
end

while (true) do
  if math.min(table.unpack(data)) ~= 32 and math.max(table.unpack(data)) ~= 512 then
    for i, v in ipairs(data) do
        data[i] = clamp(v + (10 * -1), 32, 512)
    end
  else
    print(table.unpack(data))
    break
  end
end

-1 输出:

32 112 87 54 212 304 80 32 53 34 302 492 32 399 101 202

+1 输出:

43 132 107 74 232 324 100 49 73 54 322 512 44 419 121 222

2019-05-11 23:23:05