【问题标题】:Sorting objects by array.count in swift快速按array.count对对象进行排序
【发布时间】:2016-01-06 09:09:40
【问题描述】:

我有一类用户和另一类用于设备:

class User {

var userId: Int
var userName: String
var location: String
var devices = [Device]()

init(user_id: Int, userName: String, location: String, devices: [Device]){

    userId = user_id
    self.userName = userName
    self.location = location
    self.devices = devices
}}

    class Device{

var deviceId : Int
var type: deviceType
var operating_system: operatingSystem
var userId: Int
var description: String
var inventoryNumber: String

init(device_id: Int, type: deviceType, operating_system : operatingSystem, userId:Int, description: String, inventory_num: String ){

    self.userId = userId
    deviceId = device_id
    self.type = type
    self.operating_system = operating_system
    self.description=description
    inventoryNumber = inventory_num
    }}

我从这个类中实例化了一些对象,我将在这里只粘贴一行:

var userArray = [User]()
var user1 = User(user_id: 1, userName: "John", location: "ClujNapoca",            devices: [device1, device2])

我总共有 10 个用户附加到阵列中,具有不同数量的设备,我想按他们拥有的设备数量对它们进行排序。我已经尝试了很多,但没有成功..

【问题讨论】:

    标签: arrays swift class sorting object


    【解决方案1】:

    试试这个(按升序排序):

    userArray = userArray.sort({ $0.devices.count < $1.devices.count })
    

    【讨论】:

    • 我试过这个,我有一个错误:无法将类型()的值分配给类型(用户)的值
    • 我尝试了另一种方法,通过在类中声明一个变量来计算数组中的设备,并将其命名为deviceCount,但错误是一样的:prntscr.com/8p629w
    • 你的问题是“userArray = userArray.sort”你不能在swift中以这种方式将数组分配给它自己。
    • 您的问题是“userArray = userArray.sort”您不能以这种方式快速将数组分配给它自己。 swift 2 中的一个简单解决方案是使用 userArray.sortInPlace(.....) 或者您可以将其分配给一个新变量。
    【解决方案2】:

    .sort 是你的朋友。

    为了减少问题:

    struct User {
        var name: String
        var numberOfDevices: Int
    }
    
    var users = [User]()
    users.append(User(name: "Mark", numberOfDevices: 4))
    users.append(User(name: "Tom", numberOfDevices: 55))
    users.append(User(name: "Jerry", numberOfDevices: 10))
    users.append(User(name: "Rex", numberOfDevices: -5))
    
    var sortedUsers = users.sort({ $0.numberOfDevices > $1.numberOfDevices })
    print(sortedUsers)
    

    【讨论】:

      【解决方案3】:

      我找到了这个解决方案:

      var array: [[Int]] = []
      .. some code
      array = array.sorted(by: { $0.count < $1.count })
      

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 2016-07-23
        • 2012-01-07
        • 2016-05-09
        • 1970-01-01
        • 1970-01-01
        • 2021-06-15
        相关资源
        最近更新 更多