很抱歉问题的措辞复杂。我的主要经验是使用PHP,它有一个名为array_multisort的命令。语法如下:
bool array_multisort ( array &$array1 [, mixed $array1_sort_order = SORT_ASC [, mixed $array1_sort_flags = SORT_REGULAR [, mixed $... ]]] )
它使您可以对1个数组进行排序,并根据原始数组中的关键更改对其他多个数组进行重新排序。
在Swift / Xcode 7.2中有等效的命令吗?
我目前有一组数组:
名年龄城市国家有效
活动状态是用户在我的应用程序中处于活动状态的时间(以秒为单位)。我想命令降序或升序以及其他数组更改以保持一致。
您可以按排序顺序创建索引数组,并将其用作映射:
var names = [ "Paul", "John", "David" ] var ages = [ 35, 42, 27 ] let newOrder = names.enumerate().sort({$0.1<$1.1}).map({$0.0}) names = newOrder.map({names[$0]}) ages = newOrder.map({ages[$0]})
[编辑]这是对这项技术的改进:
这是相同的方法,但是一步就完成了排序和分配。(可以重新分配给原始数组或单独的数组)
(firstNames,ages,cities,countries,actives) = {( $0.map{firstNames[$0]}, $0.map{ages[$0]}, $0.map{cities[$0]}, $0.map{countries[$0]}, $0.map{actives[$0]} )} (firstNames.enumerated().sorted{$0.1<$1.1}.map{$0.0})
[EDIT2]和一个Array扩展名,如果您在适当的地方进行排序,则使其更易于使用:
extension Array where Element:Comparable { func ordering(by order:(Element,Element)->Bool) -> [Int] { return self.enumerated().sorted{order($0.1,$1.1)}.map{$0.0} } } extension Array { func reorder<T>(_ otherArray:inout [T]) -> [Element] { otherArray = self.map{otherArray[$0 as! Int]} return self } } firstNames.ordering(by: <) .reorder(&firstNames) .reorder(&ages) .reorder(&cities) .reorder(&countries) .reorder(&actives)
结合前两个:
extension Array { func reordered<T>(_ otherArray:[T]) -> [T] { return self.map{otherArray[$0 as! Int]} } } (firstNames,ages,cities,countries,actives) = {( $0.reordered(firstNames), $0.reordered(ages), $0.reordered(cities), $0.reordered(countries), $0.reordered(actives) )} (firstNames.ordering(by:<))