基于变量过滤 Any 数组
Filter array of Any based on variable
我有一个类型为 Any
的数组,在该数组中有两种不同的类型,Person
和 SportsMan
这两种类型都有一个名为 rank
的值。我想根据排名对我的数组进行排序。这是我今天的做法并且有效:
self.persons.sort {
let a = ([=10=] as AnyObject) as? Person
let b = ([=10=] as AnyObject) as? SportsMan
let l = a?.rank ?? b?.rank
let c = ( as AnyObject) as? Person
let d = ( as AnyObject) as? SportsMan
let r = c?.rank ?? d?.rank
return l! < r!
}
由于 l! < r!
中的 !
,我有点不确定。这是解决此问题的好方法还是用于此的任何内置函数?
制定协议如Rankable
,并使Person
和SportsMan
符合。
protocol Rankable {
var rank: Int { get }
}
然后将你的数组变成 [Rankable]
(a.k.a. Array<Rankable>
) 而不是 [Any]
,并像这样排序:
self.persons.sort{ [=11=].rank < .rank }
我有一个类型为 Any
的数组,在该数组中有两种不同的类型,Person
和 SportsMan
这两种类型都有一个名为 rank
的值。我想根据排名对我的数组进行排序。这是我今天的做法并且有效:
self.persons.sort {
let a = ([=10=] as AnyObject) as? Person
let b = ([=10=] as AnyObject) as? SportsMan
let l = a?.rank ?? b?.rank
let c = ( as AnyObject) as? Person
let d = ( as AnyObject) as? SportsMan
let r = c?.rank ?? d?.rank
return l! < r!
}
由于 l! < r!
中的 !
,我有点不确定。这是解决此问题的好方法还是用于此的任何内置函数?
制定协议如Rankable
,并使Person
和SportsMan
符合。
protocol Rankable {
var rank: Int { get }
}
然后将你的数组变成 [Rankable]
(a.k.a. Array<Rankable>
) 而不是 [Any]
,并像这样排序:
self.persons.sort{ [=11=].rank < .rank }