Arrays 在swift 3中移动数组末尾的一些对象

Arrays 在swift 3中移动数组末尾的一些对象,arrays,swift,Arrays,Swift,我有一个对话列表,需要根据上次更新的时间进行排序。我能够做到这一点,但现在我还需要添加一个检查,如果用户未包括在对话中,那么它应该出现在列表的末尾 func sortConversationList () { self.conversationList = self.conversationList.sorted(by: { $0.lastupdatedTime! > $1.lastupdatedTime! }) for (index, conversation) in self.

我有一个对话列表,需要根据上次更新的时间进行排序。我能够做到这一点,但现在我还需要添加一个检查,如果用户未包括在对话中,那么它应该出现在列表的末尾

func sortConversationList () {
self.conversationList = self.conversationList.sorted(by: { $0.lastupdatedTime! > $1.lastupdatedTime! })
    for (index, conversation) in self.conversationList.enumerated() {
        if (conversation.isIncluded == kNo) {
            self.conversationList.move(at: index, to: self.conversationList.endIndex-1)
        }
    }
    self.tableView.reloadData()
}
 mutating func move(at oldIndex: Int, to newIndex: Int) {
        self.insert(self.remove(at: oldIndex), at: newIndex)
    }

但这并不正常。在swift中有更好的方法吗

你的方法太复杂了。您有两个排序标准:

  • 包括
    值应在
    值之前排序
  • lastUpdateTime
    –应首先对较大的值进行排序
  • 这可以通过单个
    sort()
    调用完成:

    conversationList.sort(by: { 
        if $0.isIncluded != $1.isIncluded {
            return $0.isIncluded
        } else {
            return $0.lastupdatedTime > $1.lastupdatedTime
        }
    })
    
    这假设
    包括在内
    是一个布尔变量(这是合理的)。如果是整数(如您在注释中所示) 那就更简单了:(比较):


    在排序的过程中,对列表进行排序。yikesSorting工作正常,但有时isIncluded的真值位于顶部,有时为假值。我将第一个if条件更新为“if$0.isIncluded!=$1.isIncluded&$0.isIncluded!==false”,但它不起作用:-|考虑包含值1,0而不是真值。1个值应该在顶部,0个值应该在底部。@aqsaarshad:包含了什么类型的
    ?什么是
    isinclude1
    ?“isIncluded”是int类型。我已经编辑了我的评论。然后
    返回$0.isIncluded>$1。在第一种情况下包含。
    
    conversationList.sort(by: {
        ($0.isIncluded, $0.lastupdatedTime) > ($1.isIncluded, $1.lastupdatedTime)
    })