如何借助整数数组对字符串数组排序?(含错误循环代码)
借助排序索引数组对目标数组排序的正确实现
嗨,我来帮你搞定这个排序问题!先看看你代码里的几个小问题:
- 循环范围用了
0...names.count,这会导致索引越界——Swift数组的有效索引是从0到count-1,当i等于names.count时,sorting[i]就会超出数组边界,程序直接崩溃。应该改成0..<names.count(左闭右开的范围,刚好覆盖所有有效索引)。 - 你写的
names[sorting]是错误的,应该用sorting[i]作为索引去取names里的元素,也就是names[sorting[i]]。 - 没必要把元素转成字符串,
names本身就是字符串数组,直接添加到sortedNames里就行。
修正后的for循环实现
var names = ["anna", "berta", "caesar", "dora"] var sorting = [2, 0, 1, 3] var sortedNames: [String] = [] for i in 0..<names.count { let element = names[sorting[i]] sortedNames.append(element) } print(sortedNames) // 输出: ["caesar", "anna", "berta", "dora"]
更简洁的Swift风格实现
其实在Swift里,我们可以用map方法一步到位,代码更简洁易读:
var names = ["anna", "berta", "caesar", "dora"] var sorting = [2, 0, 1, 3] let sortedNames = sorting.map { names[$0] } print(sortedNames) // 输出: ["caesar", "anna", "berta", "dora"]
map会遍历sorting数组里的每一个索引值,用这个索引去names数组中取出对应的元素,最后自动生成排序后的新数组,完全不需要手动写循环和append。
内容的提问来源于stack exchange,提问作者M.Warner
相关产品推荐
相关产品推荐

