如何通过数字数组的参数对对象进行排序(Swift)

时间:2018-08-15 18:42:31

标签: arrays swift

我想通过参数对对象进行排序。但是此参数不是值,而是值的数组。

class MyObject:{
    var arrayOfDoubles: [Double]
}

我已经解决了如何订购参数arrayOfDoubles

self.arrayOfDoubles.sorted(by: >)

我现在的问题是如何通过参数myObjects对数组arrayOfDoubles进行排序

myObjects: [MyObject]

我已经尝试过这种解决方案,但是它仅在参数是数字而不是数字数组时才有效     myObjects.sorted(by: { $0.arrayOfDoubles > $1.arrayOfDoubles })

1 个答案:

答案 0 :(得分:1)

这可能不完全是您想要的,因为我无法弄清楚您想要什么(而且我不确定您也可以这样做)。但是总的来说,如果您定义一个自定义结构并将其设置为“相等”和“可比”,那么您的问题将会解决。然后,您可以直接使用><进行排序,如下所示:

struct Pair : Comparable {
    let ix1:Int
    let ix2:Int
    init(_ ix1: Int, _ ix2:Int) {
        self.ix1 = ix1; self.ix2 = ix2
    }
    static func ==(lhs:Pair, rhs:Pair) -> Bool {
        return lhs.ix1 == rhs.ix1 && lhs.ix2 == rhs.ix2
    }
    static func <(lhs:Pair, rhs:Pair) -> Bool {
        return lhs.ix1 < rhs.ix1 && lhs.ix2 < rhs.ix2
    }
}

let array1 = [Pair(1,3), Pair(10,11), Pair(0,1)]
let array2 = array1.sorted(by:>)
// [{ix1 10, ix2 11}, {ix1 1, ix2 3}, {ix1 0, ix2 1}]

正如我所说,这只是一个例子;对其进行调整,以使其表明您的意思(如果您甚至知道自己的意思)。

例如,如果此对现在成为另一个对象类型Obj的属性,则以相同的方式是很简单的:

struct Obj {
    let pair : Pair
}
let array3 = [Obj(pair:Pair(1,3)), Obj(pair:Pair(10,11)), Obj(pair:Pair(0,1))]
let array4 = array3.sorted {$0.pair > $1.pair}

我相信这是您的问题想要使用的语言...

相关问题