Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 基于布尔值的对象快速排序数组_Arrays_Sorting_Swift - Fatal编程技术网

Arrays 基于布尔值的对象快速排序数组

Arrays 基于布尔值的对象快速排序数组,arrays,sorting,swift,Arrays,Sorting,Swift,我正在寻找一种基于布尔值对Swift数组进行排序的方法 我已经通过对NSArray的投射使其工作: var boolSort = NSSortDescriptor(key: "selected", ascending: false) var array = NSArray(array: results) return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile] 但我在寻找Swift的变种,有什么想法吗 更新 多亏

我正在寻找一种基于布尔值对Swift数组进行排序的方法

我已经通过对NSArray的投射使其工作:

var boolSort = NSSortDescriptor(key: "selected", ascending: false)
var array = NSArray(array: results)
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]
但我在寻找Swift的变种,有什么想法吗

更新 多亏了Arkku,我成功地使用以下代码修复了此问题:

return results.sorted({ (leftProfile, rightProfile) -> Bool in
    return leftProfile.selected == true && rightProfile.selected != true
})

Swift的数组可以使用
排序
进行就地排序,也可以使用
排序
进行新数组排序。任一函数的单个参数都是一个包含两个元素的闭包,如果第一个元素在第二个元素之前排序,则返回
true
。使用闭包参数的最短方法是将它们称为
$0
$1

例如(要先对真正的布尔值进行排序):


(编辑:针对Swift 3、4和5进行了更新,以前的
sort
was
sortInPlace
sorted
was
sort

Swift的标准库提供了一个名为sorted的函数,该函数根据您提供的排序闭包的输出对已知类型的值数组进行排序

reversed = sorted(array) { $0 > $1 }
reversed
将是一个新数组,它将根据闭包中给出的条件进行排序。

新(对于Swift 1.2)

旧版(适用于Swift 1.0)

假设
结果
的类型为
[VDLProfile]
,并且VDLProfile有一个
Bool
成员:

return results.sorted { $0.selected < $1.selected }
return results.sorted{$0.selected<$1.selected}

请参阅文档以了解

谢谢,使用您的答案,我已成功地在Swift中解决了此问题。我已经用答案更新了我的问题。请注意,在Swift 3.0中使用了sort。这给了我一个错误:无法使用.re类型的参数列表调用“sorted”。在问题中更新,将布尔值与
true
进行比较是不必要的混乱,最好是在闭包周围省略
()
(当闭包是最后一个参数时允许这样做)。
return results.sort { $0.selected && !$1.selected }
return results.sorted { $0.selected < $1.selected }