[英]Best way to find time segments in a time frame
我目前正在制作一个应用程序,我必须在其中检索某些工作时间的津贴。
例如,我从下午 3:00 工作到晚上 10:00。 在此期间,将在晚上 8:00 至晚上 10:00 之间给予 20% 的津贴,从晚上 10:00 至晚上 11:00 给予 35% 的津贴。
到现在为止,我没有比一个相当复杂的 if 构造更进一步。
if startUur <= 20 && eindUur >= 22 || 20..<22 ~= startUur || 20..<22 ~= eindUur || startUur > 20 && eindUur <= 22 && startMinuut > 0 || startUur < 20 {
//code to calculate allowance
}
我一直在寻找一种更好更好的方法来做到这一点,但我找不到。
有没有更好的方法,或者我是否必须使用 if 构造来使用这种方法?
struct TimeAndMoneyFrame {
var timeHourStart:Int = 0
var timeHourEnd:Int = 0
var percentage: Double = 0
}
extension TimeAndMoneyFrame {
func timeLength() -> Int {
return timeHourEnd - timeHourStart
}
}
let 2000to2200 = TimeAndMoneyFrame(timeHourStart = 20, timeHourEnd = 22, percentage = 0.2)
let 2200to2300 = TimeAndMoneyFrame(timeHourStart = 22, timeHourEnd = 23, percentage = 0.35)
let timeArray:[TimeAndMoneyFrame] = [2000to2200]
//Assuming 'startUur' means startingHour
//Assuming 'eindUur' means endingHour
let startUur:Int = someHour // You define some hour
let eindUure:Int = someHour // You define some hour
let hourlyRateOfPay: Double = somePay // You define some pay
var totalPay: Double = 0
for time in timeArray {
let start = time.timeHourStart
let end = time.timeHourEnd
let percent = time.percentage
//Encompasses entirely
if(start > startUur && end < eindUur) {
totalPay += (hourlyRateOfPay * (1 + percent) * time.timeLength())
}
//Only encompassed the left side - i.e., their time worked ends within this time frame
else if(start > startUur) {
let timeWithinThisFrame = eindUur - start
totalPay += (hourlyRateOfPay * (1 + percent) * (timeWithinThisFrame/time.timeLength())
}
//Only encompassed right side - i.e., the beginning of the starts within this time frame
else if(eindUur < end) {
let timeWithinThisFrame = end - startUur
totalPay += (hourlyRateOfPay * (1 + percent) * (timeWithinThisFrame/time.timeLength())
}
}
所以,我们可以把这个问题分解成几个问题。
1) 定义一个包含具有相关百分比的时间范围的结构/类
2) 计算总工资所需的算法
我有一个基本假设。
1)你说津贴 - 如果一个人在 2200 到 2300 年工作,他们将获得 35% 的津贴 - 我把它当作奖金,所以说是正常小时费率的 1.35%。 如果不是这种情况,那么一次消耗一个时间帧的想法将是相同的。 唯一的区别可能是 totalPay 计算。
我的算法遍历每个时间框架并确定当前时间是否截取任何时间框架。 如果是这样,我会计算它截获的数量并计算工资率。
注意:我在 SO 上编写了所有这些 - 可能存在一些语法问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.