NSP*_*tik 4 arrays sorting nsarray ios swift
我有一组模型,它有 2 个属性:
1.标题 (字符串)
2. isSelected(布尔)
我想根据isSelected属性对它们进行排序,使其相对于源数组的序列进行排序。例如,如果全部为 FALSE 或 TRUE,则排序后应该有相同的输出。
但如果我使用以下方法,它会在基于 BOOL 属性对它们进行排序后更改原始排序。
someArray = array.sort { $0.selected && !$1.selected }
Run Code Online (Sandbox Code Playgroud)
我应该怎么做才能保留原来的顺序?
编辑1
title图片中未显示排序顺序。可能服务器向我发送了 4 个标题为 Z、Y、P、A 的对象。因此,如果全部都是假的,一旦我排序,它应该像 Z 假,Y 假,P 假,A 假。
你需要
someArray = array.sorted (by:{ $0.selected && !$1.selected && <#Add more conditions #>})
Run Code Online (Sandbox Code Playgroud)
sorted (by与原始数组不同,不会改变原始数组sort
https://developer.apple.com/documentation/swift/array/1688499-sort
https://developer.apple.com/documentation/swift/array/2296815-sorted
您可以使用过滤操作更有效地完成排序,而不是排序:
let newArray = array.filter { $0.selected } + array.filter { !$0.selected }
Run Code Online (Sandbox Code Playgroud)
不幸的是,Array.sorted不能保证稳定的排序,因此您不能只按一个属性排序并期望保留原始排序。
不过,您可以轻松实现稳定排序(例如/sf/answers/3538203301/)
然后你可以简单地使用:
let newArray = array.stableSorted {
let numeric1 = $0.selected ? 0 : 1
let numeric2 = $1.selected ? 0 : 1
return numeric1 <= numeric2
}
Run Code Online (Sandbox Code Playgroud)
或者
let newArray = array.stableSorted {
return $0.selected == $1.selected || $0.selected
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2118 次 |
| 最近记录: |