Arrays 如何根据swift中的其他阵列位置对一个阵列进行排序?
在Swift中,假设我有两个数组:Arrays 如何根据swift中的其他阵列位置对一个阵列进行排序?,arrays,swift,sorting,Arrays,Swift,Sorting,在Swift中,假设我有两个数组: var array1: [Int] = [100, 40, 10, 50, 30, 20, 90, 70] var array2: [Int] = [50, 20, 100, 10, 30] 我想把我的aary1按照array2分类 所以我的array1的最终输出将是://array1=[50,20,100,10,30, 40、90、70] 尽管你的问题措辞含糊不清,但从你的例子来看,你真正想要的是两个数组的并集,较小数组的元素排在第一位,较大数组的唯一元素
var array1: [Int] = [100, 40, 10, 50, 30, 20, 90, 70]
var array2: [Int] = [50, 20, 100, 10, 30]
我想把我的aary1按照array2分类
所以我的array1的最终输出将是://array1=[50,20,100,10,30,
40、90、70]
尽管你的问题措辞含糊不清,但从你的例子来看,你真正想要的是两个数组的并集,较小数组的元素排在第一位,较大数组的唯一元素排在第二位,顺序不变,排在这个数组的末尾 以下代码实现了示例的结果:
let combined = array2 + array1.filter{array2.index(of: $0) == nil}
您尚未定义如何对
array1
中的元素进行排序,但未定义array2
中的元素进行排序。此解决方案假定您希望按数值对未找到的元素进行排序:
var array1 = [100, 40, 10, 50, 30, 20, 90, 70]
var array2 = [50, 20, 100, 10, 30]
array1.sort {
let index0 = array2.index(of: $0)
let index1 = array2.index(of: $1)
switch (index0, index1) {
case (nil, nil):
return $0 < $1
case (nil, _):
return false
case (_, nil):
return true
default:
return index0! < index1!
}
}
print(array1) // [50, 20, 100, 10, 30, 40, 70, 90]
// ^ order not defined in array2
var数组1=[100,40,10,50,30,20,90,70]
变量array2=[50,20,100,10,30]
排序{
设index0=array2.index(of:$0)
设index1=array2.索引(共:$1)
开关(index0,index1){
案件(无,无):
返回$0<$1
情况(无):
返回错误
情况(无):
返回真值
违约:
返回index0!
它确实有效,因为它保留了两个数组的唯一元素。问题没有说明如果没有一个数组是另一个数组的子集,那么排序应该是什么,所以在本例中,它们只是连接在一起。@LucaAngeletti这是对实际排序的人的一般性评论,因此我没有标记您。或的可能重复