gpt4 book ai didi

arrays - 数组无法正确排序 : Swift 4

转载 作者:行者123 更新时间:2023-11-28 10:11:02 25 4
gpt4 key购买 nike

我试图对一组自定义对象进行排序,但出于某种原因,几周前运行的代码将不再运行。它应该检查 $0 和 $1 是否具有相同的日期,如果它们相同,则应该按 id 对数组进行排序,但目前它不会正确排序,当我打印数组时,我得到以下输出:

11-07-2017 : 1
11-07-2017 : 10
11-07-2017 : 11
11-07-2017 : 12
11-07-2017 : 13
11-07-2017 : 14
11-07-2017 : 15
11-07-2017 : 16
11-07-2017 : 17
11-07-2017 : 18
11-07-2017 : 19
11-07-2017 : 2
11-07-2017 : 20
11-07-2017 : 3
11-07-2017 : 4
11-07-2017 : 5
11-07-2017 : 7
11-07-2017 : 8
11-07-2017 : 9
11-08-2017 : 1
11-08-2017 : 2
11-09-2017 : 1
11-09-2017 : 2

如上所示,只有少数条目的日期排序正确,但条目较多的日期 (11-07-17) 却没有。

下面是我的代码:

阵列模型:

struct BalanceUser {

var id = ""

var name = ""

var date = ""

}

当前排序代码:

self.sortedTableArray.sort(by: {
if $0.date != $1.date {
return $0.date < $1.date
} else {
return $0.id < $1.id
}
})

Firebase 代码(根据要求):

ref.child("Admin").child("Balances").observeSingleEvent(of: .value, with: { (snapshot) in

let value = snapshot.value as? NSDictionary

if value!.count > 1 {

let specificValues = value?.allKeys

for balanceUser in specificValues! {

var user = BalanceUser()

user.date = balanceUser as! String

if balanceUser as? String != "balance" {

var i = 0

var counter = 0

while i < 101 {

self.ref.child("Admin")
.child("Balances")
.child(balanceUser as! String)
.child(String(i))
.observeSingleEvent(of: .value, with: { (snapshot) in

let nameValue = snapshot.value as? NSDictionary

if nameValue != nil {

user.id = counter

var j = 0

while j < (nameValue?.count)! {

let item = nameValue?.allKeys[j] as? String

var aItem = ""

if let item = nameValue?.allValues[j] as? String {

aItem = item

} else if let item = nameValue?.allValues[j] as? NSNumber {

aItem = String(describing: item)

} else if let item = nameValue?.allValues[j] as? Int {

aItem = String(describing: item)

}


if item == "name" {

user.name = aItem

} else if item == "money" {

user.money = aItem

} else if item == "balance" {

user.balance = aItem

} else if item == "status" {

user.status = aItem

}

j += 1

}


let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "MM-dd-yyyy"

if user.date.components(separatedBy: "-")[0] == dateFormatter.string(from: Date()).components(separatedBy: "-")[0] {

self.sortedTableArray.append(user)

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.tableArray.append(user)

self.tableArray.sort(by: { (object1, object2) -> Bool in

if object1.date == object2.date && object1.year == object2.year {

return object2.id > object1.id

} else {

return object1.date < object2.date || object1.year < object2.year

}

})

self.tableView.reloadData()

}

counter += 1

}) { (error) in

print(error.localizedDescription)

}

i += 1

}

}

}

} else {

self.view.makeToast(message: "No Users Found in Database")

}

}) { (error) in

print(error.localizedDescription)

}

最佳答案

它在您编写时排序绝对正确。

字符串从一开始就对每个字符进行比较。如果第一个字符相等,则检查第二个,依此类推。在您的结果“10”<“2”中,导致“1”字符的 unicode 小于“2”字符代码。

你需要这样比较:

self.sortedTableArray.sort(by: {
if $0.date != $1.date {
return $0.date < $1.date
} else {
return Int($0.id) ?? 0 < Int($1.id) ?? 0
}
})

此外,您应该将日期作为 Date 而不是字符串进行比较。

关于arrays - 数组无法正确排序 : Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com