lua - 如何根据当前日期对Lua中的表格进行排序
问题描述
我需要一个数组,它将以今天的日期作为第一个元素并按该顺序对所有其他元素进行排序。
self.dayw=tonumber(os.date("%w")) --today's date
this is the array I have already implemented
self.dayArray[1]=response["monday"]
self.dayArray[2]=response["tuesday"]
self.dayArray[3]=response["wednesday"]
self.dayArray[4]=response["thursday"]
self.dayArray[5]=response["friday"]
self.dayArray[6]=response["saturday"]
self.dayArray[7]=response["sunday"]
因此,如果今天是星期五,我需要该数组从星期五开始作为第一个元素。
我创建了 sortArray={} 并尝试根据日期用元素填充它,但是代码太“忙碌”了,可能有一个更聪明的解决方案。如果可以请帮忙。
解决方案
一周中的每一天都分配有一个编号,从星期日开始到1
星期六结束7
。为了找到当前日期的数字表示, call os.date("*t")
,它返回一个表格,其中包含有关当前日期、月份、年份等的信息。此表格中对应于当前日期数字的字段称为wday
。
for k, v in pairs(os.date("*t")) do
print(k, v)
end
输出:
year 2020
wday 6
month 8
isdst true
hour 21
day 28
sec 13
yday 241
min 48
这里,与 key 关联的值为wday
,6
对应于 Friday。
使用此数字,您可以通过在当前日期之前弹出元素然后在最后重新插入它们来重新排序您的日期表。
-- Local references to table functions.
local tblins = table.insert
local tblrmv = table.remove
local days = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday"
}
local function reorder(days, wday)
for i = wday - 1, 1, -1 do
-- Pop element days[1] and then append it.
tblins(days, tblrmv(days, 1))
end
return
end
local date_table = os.date("*t")
reorder(days, date_table.wday)
for i, day in ipairs(days) do
print(i, day)
end
输出:
1 Friday
2 Saturday
3 Sunday
4 Monday
5 Tuesday
6 Wednesday
7 Thursday
如果您想要一个易于重新启动的版本,这是我现有解决方案的扩展:
-- Local references to table functions.
local tblins = table.insert
local tblrmv = table.remove
local tblsrt = table.sort
-- The field `day' refers to the string representation; `num' refers to the
-- given day's original position in the table, which is used to restore the
-- table to its starting order.
local days = {
{day = "Sunday", num = 1},
{day = "Monday", num = 2},
{day = "Tuesday", num = 3},
{day = "Wednesday", num = 4},
{day = "Thursday", num = 5},
{day = "Friday", num = 6},
{day = "Sunday", num = 7}
}
local function sort_days(left_day, right_day)
return left_day.num < right_day.num
end
-- The reorder function remains the same
-- To put the days table back in its original order, call the following:
tblsrt(days, sort_days)
for i, day in ipairs(days) do
print(i, day.day, day.num)
end
输出:
1 Sunday 1
2 Monday 2
3 Tuesday 3
4 Wednesday 4
5 Thursday 5
6 Friday 6
7 Saturday 7
推荐阅读
- prolog - 如何在“SWISH”“Prolog”中添加空格?
- java - Keycloak社交登录休息api
- string - 在单引号字符串中使用双引号会更改转义行为
- superset - 网页中的 Apache 超集仪表板
- python - 删除重复行但保留某些值 Pandas
- c - 将 double 转换为 int 而不四舍五入
- sql - 在bigquery中根据条件合并记录
- docker - 如何制作安全的 nginx-proxy 以在单个服务器中指向不同的路径?
- .net-core - VS for Mac 2017 使用 .NET Core SDK 而不是 Mono 构建
- angular - 完成方法后如何调用方法?