我的问题很简单:
我的数据库中有很多用户得分(顺便说一下,我正在使用firebase)
我想得到这些分数(很容易)然后分类(不太容易)
如果用户完成了训练,他将输入他的时间,如果没有,他将输入数字或重复次数。
简单地说,result对象如下:

Result
 |_ resultValue (Int) // It can be time in seconds or number of reps
 |_ isFinished (Int) // It can be 0 (not finished) or 1 (finished)

我想对我的结果数组进行如下排序:
第一:isfinished==1的所有结果都高于其他结果
然后:按resultvalue desc将结果排序,其中isfinished==1
最后:按resultvalue asc对结果进行排序,其中isfinished==0
我试过这样的方法:
self.results = self.results.sorted {
 ($0.result.isForTimeFinished!, $0.result.resultValue!) >
 ($1.result.isForTimeFinished!, $1.result.resultValue!)
}

所以,未完成的训练结果是在完成的训练结果之后,但是“sort results where is finished==1 by resultvalue desc”是不正确的…
你知道我怎么把这些结合起来吗?

最佳答案

试试这个:

self.results = self.results.sorted {
    if $0.result.isForTimeFinished != $1.result.isForTimeFinished {
        return $0.result.isForTimeFinished > $1.result.isForTimeFinished
    }
    else if $0.result.isForTimeFinished == 0 {
        return $0.result.resultValue > $1.result.resultValue
    }
    else {
        return $0.result.resultValue < $1.result.resultValue
    }
}

注:我可能有相反的迹象,但发挥了一点

10-08 14:44