Arrays 如何搜索数组中的最小正值?
在我的代码中,Arrays 如何搜索数组中的最小正值?,arrays,swift,for-in-loop,Arrays,Swift,For In Loop,在我的代码中,checkTheNextTime()函数的数组包含字符串00.00到23.59。通过编写此函数,我希望找到最近的未来时间。但当我尝试使用时间表(代码中显示)时,它返回23.30,而不是23.32(现在是22.24)。我猜编译器会从右向左搜索数组。我怎样才能找到最近的未来时间 var timeTable = ["09.00","10.20","10.35","11.55","12.00","12.40","13.20","14.40","14.50", "23.00", "23.30
checkTheNextTime()
函数的数组包含字符串00.00到23.59。通过编写此函数,我希望找到最近的未来时间。但当我尝试使用时间表(代码中显示)时,它返回23.30,而不是23.32(现在是22.24)。我猜编译器会从右向左搜索数组。我怎样才能找到最近的未来时间
var timeTable = ["09.00","10.20","10.35","11.55","12.00","12.40","13.20","14.40","14.50", "23.00", "23.30", "23.31", "23.32"]
func checkTheNextTime(array array: Array<String>) -> String{
var nextTime: String?
for index in array {
let generatedString:String = getTimeAsMinToCheck(finalTime: index)
let indexInt = Int(generatedString)
if indexInt > 0{
nextTime = index
}
}
return nextTime!
}
func getTimeAsMinToCheck(finalTime finalTime: String) -> String{
let date = NSDate()
let formatter = NSDateFormatter()
formatter.timeStyle = NSDateFormatterStyle.NoStyle
formatter.dateStyle = NSDateFormatterStyle.ShortStyle
let now = formatter.stringFromDate(date)
formatter.locale = NSLocale.systemLocale()
formatter.dateFormat = "M/dd/yy HH.mm"
let datetofinish = formatter.dateFromString("\(now) \(finalTime)")
let finishDate: NSDate = datetofinish!
let secondsFromNowToFinish = finishDate.timeIntervalSinceNow
let minutes = Int(secondsFromNowToFinish / 60)
return String(minutes)
}
var时间表=[“09.00”、“10.20”、“10.35”、“11.55”、“12.00”、“12.40”、“13.20”、“14.40”、“14.50”、“23.00”、“23.30”、“23.31”、“23.32”]
func checkTheNextTime(数组:array)->String{
var nextTime:字符串?
用于数组中的索引{
让generatedString:String=getTimeAsMinToCheck(最终时间:索引)
let indexInt=Int(generatedString)
如果indexInt>0{
nextTime=索引
}
}
下次再来!
}
func getTimeAsMinToCheck(finalTime finalTime:String)->String{
let date=NSDate()
let formatter=NSDateFormatter()
formatter.timeStyle=NSDateFormatterStyle.NoStyle
formatter.dateStyle=NSDateFormatterStyle.ShortStyle
let now=formatter.stringFromDate(日期)
formatter.locale=NSLocale.systemLocale()
formatter.dateFormat=“M/dd/yy HH.mm”
让datetofinish=formatter.dateFromString(“\(现在)\(最终时间)”)
让finishDate:NSDate=datetofinish!
让secondsFromNowToFinish=finishDate.timeIntervalSinceNow
分钟数=Int(秒从现在到结束/60)
返回字符串(分钟)
}
此代码应适用于您的要求:
在Swift 2.0中完成:
var时间表=[“09.00”、“10.20”、“10.35”、“11.55”、“12.00”、“12.40”、“13.20”、“14.40”、“14.50”、“23.00”、“23.30”、“23.31”、“23.32”]
func checkTheNextTime(数组:array)->字符串{
让currentTime:String=getTimeAsMinToCheck(finalTime:“23.24”)//通过从当前时间计算来设置此值
设currentTimeInt=Int(currentTime)//currentTime的Int值
var nextTime:String?//这将保存最近的未来值
var minDiff:Int=24*60//让我们从最大值开始
时间表中的索引{
让generatedString:String=getTimeAsMinToCheck(最终时间:索引)
let indexInt=Int(generatedString)
如果(indexInt>currentTimeInt){//仅检查未来时间
让timeDiff=indexInt-currentTimeInt//这将是正的
if(timeDiff
假设23是正确答案(从上面的评论中看不清楚),这里是一个使用swift 2.0和闭包的解决方案
如果
现在是22.24
,那么下一时刻
不应该是时刻表中的23.00吗?应该是23.00,因为23.00是最近的未来时间,有36分钟@Nishantis是排序的时间表
数组吗?它看起来是从最小排序到最大排序的。您使用getTimeAsMinToCheck
函数做了什么?你可以在我编辑的问题中看到func。对不起,丢失了代码。我想你是用它来获得时间的。我假设gettimeasminotocheck
正在将“23.24”
转换为2324
。你试过这个代码吗?我试过那个代码,我注意到你用getTimeAsMinToCheck func来获取字符串和int。在currentTimeInt部分你用它作为int,而generatedString部分你用它作为字符串。它应该返回string还是int?正确答案是23.30,因为函数需要获得最短的未来时间。这些值都是时钟。你上面的评论说现在=22.24,答案应该是23.0,应该是23.00,因为23.00是最近的未来时间,有36分钟@尼森特-twigofa'。。。那么,这句话是什么意思呢?我认为在我的评论中,数字有点令人困惑。实际上我问过如何找到最近的未来时间。反正我解决了。谢谢你解决了这个问题,但是你能把困惑弄清楚吗?晚上10:24对吗?23:0是晚上11:00,晚了36分钟,而23:30是晚上11:30,晚了66分钟,23:30怎么会比23:00“更近”呢?我想我不确定我错过了什么,这有点令人不安:)
var timeTable = ["09.00","10.20","10.35","11.55","12.00","12.40","13.20","14.40","14.50", "23.00", "23.30", "23.31", "23.32"]
func checkTheNextTime(array array: Array<String>) -> String{
let currentTime:String = getTimeAsMinToCheck(finalTime: "23.24") // set this value by calculating from current time
let currentTimeInt = Int(currentTime)// Int value of currentTime
var nextTime: String? //this will hold the nearest future value
var minDiff: Int = 24*60 //lets start with maximum value
for index in timeTable {
let generatedString:String = getTimeAsMinToCheck(finalTime: index)
let indexInt = Int(generatedString)
if (indexInt > currentTimeInt) { //checking for future time only
let timeDiff = indexInt - currentTimeInt // this will be positive
if (timeDiff < minDiff) {
minDiff = timeDiff //update minDiff as timeDiff is less than minDiff
nextTime = index
}
}
}
return nextTime!
}
let timeNow: Float = 22.24
let timeTable = ["09.00","10.20","10.35","11.55","12.00","12.40","13.20","14.40","14.50", "23.00", "23.30", "23.31", "23.32"]
let minDelta = timeTable
.map { Float(NSNumberFormatter().numberFromString($0) ?? 0.0) - timeNow }
.filter { $0 > 0 }
.minElement()
let nextTime = (minDelta ?? 0) + timeNow
print(nextTime) // 23.0