我想通过参数对对象进行排序。但是此参数不是值,而是值的数组。
class MyObject:{
var arrayOfDoubles: [Double]
}
我已经解决了如何订购参数arrayOfDoubles
self.arrayOfDoubles.sorted(by: >)
我现在的问题是如何通过参数myObjects
对数组arrayOfDoubles
进行排序
myObjects: [MyObject]
我已经尝试过这种解决方案,但是它仅在参数是数字而不是数字数组时才有效
myObjects.sorted(by: { $0.arrayOfDoubles > $1.arrayOfDoubles })
答案 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}
我相信这是您的问题想要使用的语言...