不用 If 将越界索引转化为标准索引

若一个列表是循环的,当需要将当前索引左右切换至上一个/下一个时。就需要做这样的转换。

虽然当索引越界时,可以用 if ,但有些丑,用一个算式即可。

(#list 代表列表长度,列表索引从1开始)

1、左切至前一个(将 x - 1 转到标准值):

y = ((x - 1) + (#list - 1)) % #list + 1

如,1,2,3,4,5,6,7 减一后 变为 7,1,2,3,4,5,6

2、右切至下一个(将 x + 1 转到标准值)

y = ((x + 1) + (#list - 1)) % #list + 1

如,1,2,3,4,5,6,7 加一后 变为 2,3,4,5,6,7,1

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

另一个实例:

在程序中,星期日是每周的第一天,如 lua 日期函数

local date = os.date("!*t", timestamp)
print(date.wday) --1表示周天(范围1~7)

当需要将程序中的星期X转为现实意义的星期X时,

2,3,4,5,6,7,1=>1,2,3,4,5,6,7

其实就是上面的 左切至前一个 的算法。

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

进一步思考:

上面的公式,x是任意值时不能处理,因为+1或-1不会超过 #list。

参考将任意角度(包括负数)转化至标准 [0, 360) 的算法:

y = (x % 360 + 360) % 360

要将任意越界数组索引(包括负数)转至标准索引的公式其实就是:

y = (x % #list + #list) % #list

只是lua的索引是从1开始的,所以就变成了:

y = (x % #list + #list - 1) % #list + 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值