问题描述
我需要一个数组,该数组将从今天的日期开始作为第一个元素,并按该顺序对所有其他元素进行排序。
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
的星期六结束。为了找到当前日期的数字表示形式,请调用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
在这里,与键wday
关联的值为6
,对应于星期五。
有了这个数字,您可以通过在当天之前弹出元素然后在末尾重新插入元素来对天数表重新排序。
-- 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.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