Swift 如何从数组中按字母顺序排序tableview,但如果条件为true,则打破该规则

Swift 如何从数组中按字母顺序排序tableview,但如果条件为true,则打破该规则,swift,Swift,我有一个填充TableView的数组。我按字母顺序对数组排序,这样tableView将从A-Z开始 在我的应用程序中,用户可以获取阵列中的一个项目并将其标记为 “需要注意” 在这篇文章中,我想讨论的是如何将该项放入现在已“标记”的数组中,并以某种方式将其放在数组的第一位 我的想法是,如果项目是“标记”的,那么在字符串的开头加上“0000”,因为我认为数字排列在字母之前。然后,当用户取消标记它时,它将删除“0000”,因此它将恢复到它所属的位置。这个选项很好,因为如果用户已经标记了几个项目,那么它

我有一个填充TableView的数组。我按字母顺序对数组排序,这样tableView将从A-Z开始

在我的应用程序中,用户可以获取阵列中的一个项目并将其标记为 “需要注意”

在这篇文章中,我想讨论的是如何将该项放入现在已“标记”的数组中,并以某种方式将其放在数组的第一位

我的想法是,如果项目是“标记”的,那么在字符串的开头加上“0000”,因为我认为数字排列在字母之前。然后,当用户取消标记它时,它将删除“0000”,因此它将恢复到它所属的位置。这个选项很好,因为如果用户已经标记了几个项目,那么它们将是列表中的第一个,并且仍然是按字母顺序排列的

但是,我不希望“0000”显示在tableview上,因为这很难看

所以,我这里的问题是…有没有一种方式,就代码而言,有一个“0000”,但用户看不到它。还是从主数组中删除该项并创建第二个数组更好?(这可能吗)

这是填充数组的代码(以及应用程序的其他几个方面)

**仅显示相关代码**

func pullServicesForCard() {
    ...
    self.serviceArray.append(aService)
    self.serviceArray.sort { $0.serviceName < $1.serviceName }
    self.tableView.reloadData()
    ...
}
func pullServicesForCard(){
...
self.serviceArray.append(aService)
self.serviceArray.sort{$0.serviceName<$1.serviceName}
self.tableView.reloadData()
...
}

像@Alistra一样,我发现你的代码有点难以理解——但我想我能看出你在追求什么

我为关键元素创建了一个带有结构的示例

struct TestData
{
    var name : String = ""
    var attention : Int = 0 // set to 1 to put at the top of the list
}
然后我创建了一些测试数据

arrayOfData.append(TestData(name: "f", attention: 0))
arrayOfData.append(TestData(name: "e", attention: 0))
arrayOfData.append(TestData(name: "bbb", attention: 1))
arrayOfData.append(TestData(name: "d", attention: 0))
arrayOfData.append(TestData(name: "c", attention: 0))
arrayOfData.append(TestData(name: "aaa", attention: 1))
arrayOfData.append(TestData(name: "b", attention: 0))
arrayOfData.append(TestData(name: "a", attention: 0))

arrayOfData.sort {
    if $0.attention == $1.attention { return $0.name < $1.name }
    return $0.attention > $1.attention
}

for t in arrayOfData
{
    print(t)
}

像@Alistra一样,我发现你的代码有点难以理解——但我想我能看出你在追求什么

我为关键元素创建了一个带有结构的示例

struct TestData
{
    var name : String = ""
    var attention : Int = 0 // set to 1 to put at the top of the list
}
然后我创建了一些测试数据

arrayOfData.append(TestData(name: "f", attention: 0))
arrayOfData.append(TestData(name: "e", attention: 0))
arrayOfData.append(TestData(name: "bbb", attention: 1))
arrayOfData.append(TestData(name: "d", attention: 0))
arrayOfData.append(TestData(name: "c", attention: 0))
arrayOfData.append(TestData(name: "aaa", attention: 1))
arrayOfData.append(TestData(name: "b", attention: 0))
arrayOfData.append(TestData(name: "a", attention: 0))

arrayOfData.sort {
    if $0.attention == $1.attention { return $0.name < $1.name }
    return $0.attention > $1.attention
}

for t in arrayOfData
{
    print(t)
}

我将通过制作第二个数组来表示“需要注意”。然后,当您在第一个数组中选择一个项目时,可以将其从第一个数组中删除并添加到第二个数组中

然后在tableView中,可以有两个部分,第一部分包含“需要注意”数组,第二部分包含原始数组。如果各部分之间没有任何间距,则应获得相同的效果

在didSelectRow函数中:

needsAttentionArray.append(firstArray[indexPath.row])
firstArray.remove(at:[indexPath.row])

我将通过制作第二个数组来表示“需要注意”。然后,当您在第一个数组中选择一个项目时,可以将其从第一个数组中删除并添加到第二个数组中

然后在tableView中,可以有两个部分,第一部分包含“需要注意”数组,第二部分包含原始数组。如果各部分之间没有任何间距,则应获得相同的效果

在didSelectRow函数中:

needsAttentionArray.append(firstArray[indexPath.row])
firstArray.remove(at:[indexPath.row])

请将粘贴的代码减少到仅需要的代码,因为很难看到正在发生的事情。请将粘贴的代码减少到仅需要的代码,因为很难看到正在发生的事情。