按照另一个数组快速排序数组 [英] sort a array according to another array, swift

查看:124
本文介绍了按照另一个数组快速排序数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有任何内置函数可以根据另一个数组对数组进行排序。例如:根据testIntArray排序testStringArray

var testStringArray = [a,b,c,d, e]
var testIntArray = [21,3,43,5,1]



函数之后,testStringArray将

  testIntArray.sort // [1,3,5,21,43] 
testStringArray // [e ,b,d,a,c]


解决方案

  var array1 = [a,b,c,d,e] 
var array2 = [21, 3,43,5,1]

let sorted = zip(array1,array2).sort {$ 0.1< $ 1.1
$ b $ array1 = sorted.map {$ 0.0}
array2 = sorted.map {$ 0.1}

print(array1)// [e, b,d,a,c]
print(array2)// [1,3,5,21,43]

类似这样的事情?我觉得它可以做得更好...



编辑:

这并不觉得它是好得多......

  zip(array1,array2).sort {$ 0.1 < ($ 0.0,atIndex:array1.count)

array2.removeAtIndex(array2)$ for $ {
array1.removeAtIndex .indexOf($ 0.1)!)
array2.insert($ 0.1,atIndex:array2.count)
}

print(array1)// [e,b ,d,a,c]
print(array2)// [1,3,5,21,43]


I am wondering is there any build-in function I can sort a array according to another array. For example: sort testStringArray according to testIntArray

var testStringArray = ["a", "b", "c", "d", "e"] var testIntArray = [21, 3, 43, 5, 1]

After the function, testStringArray will be

testIntArray.sort // [1, 3, 5, 21, 43]
testStringArray // ["e", "b", "d", "a", "c"]

解决方案

var array1 = ["a", "b", "c", "d", "e"]
var array2 = [21, 3, 43, 5, 1]

let sorted = zip(array1, array2).sort { $0.1 < $1.1 }

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

print(array1) // ["e", "b", "d", "a", "c"]
print(array2) // [1, 3, 5, 21, 43]

Something like this? I feel like it can be done better...

EDIT:

This doesn't feel like it's much better...

zip(array1, array2).sort { $0.1 < $1.1 }.forEach {
    array1.removeAtIndex(array1.indexOf($0.0)!)
    array1.insert($0.0, atIndex: array1.count)

    array2.removeAtIndex(array2.indexOf($0.1)!)
    array2.insert($0.1, atIndex: array2.count)
}

print(array1) // ["e", "b", "d", "a", "c"]
print(array2) // [1, 3, 5, 21, 43]

这篇关于按照另一个数组快速排序数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆