【问题标题】:How can I find the highest elements of an Array in Swift?如何在 Swift 中找到数组的最高元素?
【发布时间】:2016-04-30 21:35:46
【问题描述】:

谁能解释一下如何在 Swift 2.2 中获得数组的最高元素?

例如,假设我有这个代码:

let myArray: [Int] = [2, 1, 6, 3, 5 ,7, 11]

我将如何检索该数组的 3 个最高值? 在这种情况下,我想要数字 6、7 和 11。

任何帮助将不胜感激。

【问题讨论】:

  • 他们总是这样排序吗?
  • @ChiefTwoPencils 不,它们可以按任何顺序排列。
  • 此任务的一般方法是对序列进行排序(在给定的示例中,它们已经排序)并获取第一个/最后一个 n 项。在某些情况下,避免这种排序可能是有益的——实际上取决于细节。

标签: arrays swift elements


【解决方案1】:

要查找 3 个最高 项,请对数组进行排序并使用 suffix 取出最后 3 个项:

let myArray = [2, 1, 6, 3, 5 ,7, 11]
let highest3 = myArray.sort().suffix(3)
print(highest3)  // [6, 7, 11]

对于 3 个最低的项,请使用prefix

let lowest3 = myArray.sort().prefix(3)
print(lowest3)  // [1, 2, 3]

prefixsuffix 具有额外的优势,即如果您的数组少于 3 个项目,它们不会崩溃。例如,如果您要求 .suffix(3),则包含 2 个项目的数组只会返回这两个项目。

【讨论】:

    【解决方案2】:
    let highestNumber = myArray.maxElement()
    

    Shown in playground

    编辑:抱歉,没有阅读完整的问题,此方法只检索一个最高值,这是一个重新配置的版本,应该可以工作

    let myArray: [Int] = [2, 1, 6, 3, 5 ,7, 11, 4, 12, 5]
    var myArray2 = myArray
    var highestNumbers: [Int] = []
    
    while highestNumbers.count < 3 {
        highestNumbers.append(myArray2.maxElement()!)
        myArray2.removeAtIndex(myArray2.indexOf(myArray2.maxElement()!)!)
        print(highestNumbers)
    }
    

    Shown again in playground

    【讨论】:

    • 解决方案(我的意思是第二部分)不是最重要的,但是从计算的角度来看是禁食。事实上,虽然其他答案确实需要使用时间O(n log n) 进行排序,但此代码只需要时间O(n * k) 时间,其中k 是解决方案中的元素数。我认为投反对票的用户应该解释原因。
    • 在我意识到我读错了问题并添加了一个可行的解决方案以找到三个结果之前,就投下了反对票
    猜你喜欢
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2019-10-16
    • 2020-11-22
    • 2019-10-16
    相关资源
    最近更新 更多