Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何搜索数组中的最小正值?_Arrays_Swift_For In Loop - Fatal编程技术网

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和闭包的解决方案

  • 将您的时间表数组映射到当前列表的增量数组中 时间(无效项映射到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