斯威夫特4排序元组的错误
问题描述:
我一直在努力斯威夫特3相当长的时间才能够元组排序如下斯威夫特4排序元组的错误
let count = self.array1.count
let sortedTuples = (0..<count).map {(self.array2[$0], self.array3[$0], self.array1[$0], self.array4[$0], self.array5[$0], self.array6[$0], self.array7[$0], self.array8[$0])}.sorted { $0.0 > $1.0 }
self.array2 = sortedTuples.map { $0.0 }
self.array3 = sortedTuples.map { $0.1 }
self.array1 = sortedTuples.map { $0.2 }
self.array4 = sortedTuples.map { $0.3 }
self.array5 = sortedTuples.map { $0.4 }
self.array6 = sortedTuples.map { $0.5 }
self.array7 = sortedTuples.map { $0.6 }
self.array8 = sortedTuples.map { $0.7 }
注意到,所有的数组String
,除了array7
是UIColor
。
现在,当迁移到Swift 4时,出现错误;
表情太复杂,无法在合理的时间内解决;考虑 将表达式分解成不同的子表达式
如何将此长代码分解为更多行以满足Xcode 9?
答
如果我理解正确,您想对array2
进行排序,并保持其他数组以相同的方式配对。而不是创建一个怪物元组的,你可以只排序array2
其指数配对(这就是enumerated()
那样),然后使用分类指数重新映射其他阵列:
let sortedTuples = array2.enumerated().sorted { $0.1 > $1.1 }
let indices = sortedTuples.map { $0.0 }
self.array2 = indices.map { array2[$0] }
self.array3 = indices.map { array3[$0] }
self.array1 = indices.map { array1[$0] }
self.array4 = indices.map { array4[$0] }
self.array5 = indices.map { array5[$0] }
self.array6 = indices.map { array6[$0] }
self.array7 = indices.map { array7[$0] }
self.array8 = indices.map { array8[$0] }
+0
这是一种我没有考虑过的方法:)和YES,它的工作原理不错。谢谢vacawama。 BTW我喜欢你的描述我的元组:) :) –
+0
我很高兴它的帮助! :) – vacawama
这可能有助于指定类型'sortedTuples',而不是让类型推断数字为你。 – Palle
为什么你有8个并行阵列?这是一个很大的代码气味;考虑有*一个* 8个属性的结构数组。 – Hamish
@Hamish这是不可能通过巨大的代码,我想这样做 –