假设我有一个自定义类[Player]的数组,每个类都包含一个名为player.position的字符串属性
我也有一个任意的值数组,称为positionOrders,如下所示:
let positionOrders = [“QB”,“WR”,“RB”,“TE”]
我的目标是将[Player]排序为首先拥有所有“QB”,然后是“WR”,最后是“TE”.
我正在做的当前方式循环遍历positionOrders中的每个元素,然后在内部循环遍历所有玩家以附加到新数组.但是,我无法想出一种更简单(更有效)的方法.非常感谢任何提示或指示.谢谢.
对于小尺寸的positionOrders,这是一种可行的方法:
let sorted = players.sorted{ positionOrders.index(of: $0.position)! < positionOrders.index(of: $1.position)! }
这是一个更复杂的解决方案,对于更大尺寸的positionOrders来说会更快
let ordering = Dictionary(uniqueKeysWithValues: x.enumerated().map { ($1,$0) }) let sorted = players.sorted{ ordering[$0.position]! < ordering[$1.position]! }
这两种解决方案都假设所有可能的玩家位置都根据positionOrders有一个定义的顺序,因此他们使用!为了简洁.如果不是这样,请告诉我.