【发布时间】:2018-06-28 08:24:27
【问题描述】:
Vadian 先生,这个问题没有重复。请仔细阅读这个问题!
我想先用一个布尔变量值“true”对所有匹配项进行分组,然后再用一个布尔变量值“false”对所有匹配项进行分组。
struct myStruct {
var itemID: Date
var itemName: String
var selected: Bool
}
var iTable = [myStruct]()
我尝试按布尔变量对 iTable 进行排序:
let sortedTable = iTable.sorted { (previous, next) -> Bool in
return next.selected && previous.selected
}
iTable = sortedTable
(我会改进这个例子来更好地解释我)
我将内部表格(结构)的内容与表格视图一起使用
(itemID: 111, itemName: John, selected: true)
(itemID: 477, itemName: Rose, selected: false)
(itemID: 431, itemName: Peter, selected: true)
(itemID: 215, itemName: Mary, selected: true)
(itemID: 442, itemName: Marisa, selected: false)
排序后(通过布尔变量“selected”),我列出了内部表“iTable”的内容(只有名称),我得到了同样的错误输出。
约翰
玫瑰
彼得
玛丽
玛丽莎
...
If (repeat If) 我按名称排序,“itemName”变量(按字母顺序)
iTable = iTable.sorted { $0.itemName < $1.itemName }
_tableView.reloadData()
结果很完美!
与字母顺序相同,但按布尔变量排序,我想获得:
约翰(真实)
彼得(真实)
玛丽(真)
玫瑰(假)
玛丽莎(假)
...
我破旧的解决方案:
创建 2 个内部表,其中 1 个包含值为“true”的所有事件,另一个包含所有值为“false”的事件。
然后,合并 2 个内部表以获得所需的结果。
【问题讨论】:
-
那么,你得到了什么做?提供一个完整的示例,让别人可以复制粘贴并开始试验,这将大大提高您获得答案的机会。
-
想想逻辑。如果 previous.selected == true,那么它应该“在列表中上升”。如果previous.selected == false,那么它应该“向下”,对于“下一个”也是如此。然后,将 previous 和 next 与该方法进行比较: if next.selected && previous.selected { return true } else if !next.selected && previous.selected { return true } else if next.selected && !previous.selected {return false } else {//都选中 == false;在非优化但更明确的算法中返回 false}。注意:我可能已经反转了 return true/return false
-
瓦迪安先生,这个问题没有重复。请仔细阅读这个问题。
-
它确实是重复的......仔细阅读重复的答案就在其中。