arrays - swift 4 : Sorting an Array by 3 Conditions

标签 arrays swift sorting swift4

<分区>

我去年为某人制作了一个应用程序,以便他们可以跟踪从客户那里收到的钱。当时我还没有考虑如果里面有不同年份的词条会怎么样,果然,到了2018年,词条的排序就乱了。我无法弄清楚如何在两年内对我的条目数组进行排序,如果你们中的任何人能帮助我解决这个问题,我将不胜感激。以下是我遇到问题的特定页面的格式和代码。

格式:

有一个具有以下结构的 TableView,它按后面提到的标准排序。由于存在 2017 年和 2018 年的条目(日期的末尾是年份),此 tableView 使用的数组排序变得困惑。

日期 |名称 |金钱 |余额

代码:

阵列模型:

struct BalanceUser {

    var id = ""

    var name = ""

    var date = ""

    var money = ""

    var balance = ""

    var status = ""

    var year = ""

}

我向数组结构 year 添加了一个新变量,以便我可以使用它进行排序。

当前排序代码:

self.sortedTableArray.sort(by: { (object1, object2) -> Bool in
     if object1.date == object2.date {
             return object1.id < object2.id
     } else {
             return object1.date < object2.date
     }
})

self.sortedTableArray.sort(by: { (object1, object2) -> Bool in
         return object1.year < object2.year
})

目前,使用上面的代码,2018 年的条目显示在 2017 年的条目上方。我想要它,以便所有条目都按照以下标准排序:

  • 如果两个条目的日期相同,则按id排序
  • 如果两个整体的日期不相同,则按日期排序
  • 所有条目应按年份排序,以便 2018 年的条目显示在 2017 年的条目下方。

谢谢!

最佳答案

您的排序闭包还应该将条目的年份与日期进行比较。

self.sortedTableArray.sort(by: {(obj1, obj2) -> Bool in
    if obj1.date == obj2.date && obj1.year == obj2.year {
        return obj1.id < obj2.id
    }
    return obj1.year < obj2.year || obj1.date < obj2.date
})

这里,如果两个对象的dateyear相同,则id被排序。如果不是,则比较对象的年份,然后比较它们的日期,使较早年份的对象出现在较晚年份之前。

理想情况下,这些结构字段不应该是字符串类型。这些日期和年份应该是 Date 类型,或者至少在逻辑上是 Int

关于arrays - swift 4 : Sorting an Array by 3 Conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48123637/

相关文章:

iOS Swift - 调度组,异步调度

ios - ARKit – iOS 中的 SCNNode 旋转问题

java - 在 [ 和 ] 之间分割

python - 如何将 numpy 字符串数组(带逗号)保存到 CSV?

ios - 在 Swift 中更新角标(Badge)计数器

javascript - 如何按日期对 Javascript 对象数组进行排序?

c - 从二进制文件读取结构时出现问题

java - 奇怪的选择排序行为

php - MySQL和PHP中一个mysql_num_rows中的多个数组查询

c# - 在 C# 中创建所有 ASCII 字符的数组