arrays – 通过从另一个数组中排序来对Swift数组进行排序

假设我有一个自定义类[Player]的数组,每个类都包含一个名为player.position的字符串属性

我也有一个任意的值数组,称为positionOrders,如下所示:

let positionOrders = [“QB”,“WR”,“RB”,“TE”]

我的目标是将[Player]排序为首先拥有所有“QB”,然后是“WR”,“RB”,最后是“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有一个定义的顺序,因此他们使用!为了简洁.如果不是这样,请告诉我.

翻译自:https://stackoverflow.com/questions/43056807/sorting-a-swift-array-by-ordering-from-another-array

转载注明原文:arrays – 通过从另一个数组中排序来对Swift数组进行排序