如何根据另一个数组位置对数组进行排序?

时间:2015-08-30 22:01:11

标签: ios arrays swift sorting

我的tableView风格为Right Detail。因此,我有2 arrays,一个用于textLabels数据,另一个用于detailTextLabel

将有2个“排序依据”选项。一个将按textLabels数据排序,第二个将按detailTextlabels数据排序。因此,当我对第一个arraytextLabels array),第二个array (detailTextLables数组) will also have to get sorted based on the first数组`进行排序时。

我知道如何对arrays进行排序,但如何根据另一个array对其进行排序?

以下是我对array的排序方式:( {1}} array

Dates

3 个答案:

答案 0 :(得分:3)

首先,为什么没有两个阵列?因为您只有一个UITableViewCell数组,并且您希望将与特定表视图单元关联的所有数据保持在一起。并且它需要尝试协调多个数组的排序(您要求做的事情)是不必要的。

但如果你真的想这样做:

var array1 = ["1", "3", "2"]
var array2 = ["One", "Three", "Two"]

let sortedFoo = zip(array1, array2).sort { $0.0 < $1.0 }

array1 = sortedFoo.map { $0.0 }
array2 = sortedFoo.map { $0.1 }

上面代码的想法是它将两个数组合并为一个元组数组,然后根据第一个数组中的元素对它们进行排序,然后将该单个数组分解为两个独立的数组。

换句话说,由于您必须将两个数组合并为一个以进行排序,因此您最好将它们放在一个数组中。 : - )

答案 1 :(得分:2)

如何在排序数组上使用positionOf来查找I排序数组中的相应索引?

答案 2 :(得分:2)

这有点乱,但您可以使用 enumerate 同时处理索引和元素:

&#xA;&#xA;
  array1 .enumerate()。sort {&#xA;返回$ 0.element&lt; $ 1.element&#xA;}。map {$ 0.element}&#xA;&#xA; array1.enumerate()。sort {&#xA; return array2 [$ 0.index]&lt; array2 [$ 1.index]&#xA;}。map {$ 0.element}&#xA;  
&#xA;&#xA;

但是它真的更简单/更简单array。

&#xA;&#xA;
  struct Item {&#xA;让prop1:Int&#xA;让prop2:String&#xA;}&#xA;&#xA; var array = [&#xA;项目(prop1:1,prop2:“c”),&#xA;项目(prop1:2,prop2:“b”),&#xA;项目(prop1:3,prop2:“a”)&#xA;]&#xA;&#xA; array.sort {$ 0.prop1&lt; $ 1.prop1}&#xA;&#xA; array.sort {$ 0.prop2&lt; $ 1.prop2}&#xA;  
&#xA;