【问题标题】:How to find the max value in a Swift object array?如何在 Swift 对象数组中找到最大值?
【发布时间】:2015-01-10 11:34:27
【问题描述】:

假设我有一个包含Usr 对象的数组。而Usr 对象具有age 属性。除了一一读取Usr对象,一一比较age的值,有什么捷径可以做到吗?谢谢。

【问题讨论】:

标签: arrays swift


【解决方案1】:
struct User {
    var age: Int
}

let users = [ User(age: 10), User(age: 20), User(age: 30)]
let oldestUser = users.max { $0.age < $1.age }
oldestUser?.age  // 30

【讨论】:

  • 我认为这应该更正为users.map,而不是users.max
  • @toing_toing 为什么? map 单独返回一个元素数组,其中应用了给定的转换。 max(by:) 查找序列中具有给定谓词的最大元素。
  • 对不起,请忽略该评论。
【解决方案2】:

您可以简单地将用户数组映射到用户年龄数组和查找最大年龄:

class Usr {
    var age: Int

    init(_ age: Int) {
        self.age = age
    }
}

let users = [Usr(1), Usr(8), Usr(5)]

let maxAge = maxElement(users.map{$0.age}) // 8

【讨论】:

  • 请注意 Swift 3 的新语法: let maxAge = users.map { $0.age }.maxElement()
  • 在 Swift 3 中使用 max() 而不是 maxElement()。
  • 不是 max() 用于比较 2 个值,如:let x = max(2, 4)?编译器将只接受 arrayOfInts.maxElement()。
  • 在 Swift 3 中,您必须在 Swift 2 中使用 arrayOfInts.max() arrayOfInts.maxElement()。 max() 是 2 个或更多值的可变参数。
【解决方案3】:

斯威夫特 3:

let users = [Usr(15), Usr(25), Usr(20)]
let max = users.map { $0.age }.max()

// 最大值 = 25

【讨论】:

    【解决方案4】:

    使用ma​​x(by:)函数

    class Usr {
       var age: Int
       init(_ age: Int) {
           self.age = age
       }
    }
    
    let users = [Usr(3), Usr(8), Usr(6)]
    if let userWithMaxAge : Usr = users.max(by: {$0.age < $1.age}){
        print(userWithMaxAge.age)
    }
    

    它将打印 8

    【讨论】:

      【解决方案5】:

      其他方式:

      class Usr {
          var age: Int
          init(_ age: Int) {
              self.age = age
          }
      }
      
      let users = [Usr(1), Usr(8), Usr(5)]
      let largestAge = users.map{ $0.age }.reduce(0) { $0 > $1 ? $0 : $1 } // 8
      

      【讨论】:

        【解决方案6】:

        Swift 3 中的另一种方式:

        let users = [Usr(1), Usr(8), Usr(5)]    
        let maxAge = users.map { $0.age }.max()
        print(maxAge ?? "No users") // Optional(8)
        

        【讨论】:

          【解决方案7】:
          var studentsAndScores = ["Amy": Int(readLine()!)!, "James": Int(readLine()!)!, "Helen": Int(readLine()!)!]
          
          func highestScore(scores: [String: Int]) {
          
            let a = studentsAndScores["Amy"]!
            let b = studentsAndScores["James"]!
            let c = studentsAndScores["Helen"]!
          
            var temp = 0
          
            if a > temp {
              temp =  a 
            }
            if b > temp {
              temp = b
            }
            if c > temp {
              temp = c
            }
          
            print(temp)
          }
          
          highestScore(scores: studentsAndScores)
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多