加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 如何在Swift / Xcode中对1个数组进行排序,并通过相同的键

发布时间:2020-12-14 17:13:50 所属栏目:百科 来源:网络整理
导读:对不起这个问题的复杂措辞.我的主要经验是 PHP,它有一个名为array_multisort的命令.语法如下: bool array_multisort ( array $array1 [,mixed $array1_sort_order = SORT_ASC [,mixed $array1_sort_flags = SORT_REGULAR [,mixed $... ]]] ) 它允许您对1个
对不起这个问题的复杂措辞.我的主要经验是 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中是否有等效的命令?

我目前有一组数组:

名字
年龄

国家
活性

Active是用户在我的应用程序中处于活动状态的一系列时间(以秒为单位).我想命令降序或升序,其他数组改变以保持一致.

解决方法

您可以按排序顺序创建索引数组并将其用作映射:

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]和一个数组扩展,以便在您进行排序时更容易使用:

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,actives) = 
    {( 
       $0.reordered(firstNames),$0.reordered(ages),$0.reordered(cities),$0.reordered(countries),$0.reordered(actives) 
    )} 
    (firstNames.ordering(by:<))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读