Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 排序数组/映射Swift_Ios_Swift_Xcode_Sorting_Nscoding - Fatal编程技术网

Ios 排序数组/映射Swift

Ios 排序数组/映射Swift,ios,swift,xcode,sorting,nscoding,Ios,Swift,Xcode,Sorting,Nscoding,我执行了一个GET请求,并将数据保存在data中,如下所示 if let data: [MyMap] = response?.results { let var_to_sort = data self.generateStuff(var: var_to_sort) } MyMap是一个可映射对象,定义如下: class MyMap: NSCoding { var name: String? var score: Score? ... 与映射,编码等。。。 分数与

我执行了一个GET请求,并将数据保存在data中,如下所示

if let data: [MyMap] = response?.results {
   let var_to_sort = data
   self.generateStuff(var: var_to_sort)
}
MyMap是一个可映射对象,定义如下:

class MyMap: NSCoding {
   var name: String?
   var score: Score?
   ...
与映射,编码等。。。 分数与上表相同:

class Score:NSCoding {
   var number: Double?
   ...

我需要的是根据数字(从最大到最小)对数据进行排序,并将其传递给generateStuff方法。记住response.results有多个对象。有人能帮我吗

只需对数组进行排序:

let var_to_sort = data.sorted {
  $0.score?.number ?? 0 > $1.score?.number ?? 0
}

我有一个有效的解决方案来满足你的需要。这可能是一种改进代码的方法,在不需要选项时尽量避免使用选项。如果你是webservice,它总是会为你的对象返回一个名字和分数,那么不要使用选项,这会让你的生活更轻松。您可以在我的解决方案中看到,当我没有任何可选代码时,代码更易于阅读,这样的操作也很简单

// -------------- Solution 1 avoiding optionals ----------------

struct MyObject {
    var name: String
    var score: Score
}

struct Score {
    var number: Double
}

let data: [MyObject] = [MyObject(name: "obj1", score: Score(number: 12)),
                        MyObject(name: "obj2", score: Score(number: 2)),
                        MyObject(name: "obj3", score: Score(number: 24)),
                        MyObject(name: "obj4", score: Score(number: 4)),
                        MyObject(name: "obj5", score: Score(number: 1))]

let sortedObj = data.sorted(by: { $0.score.number > $1.score.number })
print(sortedObj)
// Print: obj3, obj1, obj4, obj2 and obj5

// -------------- Solution 2 using optionals ----------------

struct MyObject2 {
    var name: String?
    var score: Score2?
}

struct Score2 {
    var number: Double?
}

let data2: [MyObject2] = [MyObject2(name: "obj1", score: Score2(number: 12)),
                          MyObject2(name: "obj2", score: Score2(number: 2)),
                          MyObject2(name: "obj3", score: Score2(number: 24)),
                          MyObject2(name: "obj4", score: Score2(number: 4)),
                          MyObject2(name: "obj5", score: Score2(number: 1))]

let sortedObj2 = data2.sorted(by: {
    guard let num1 = $0.score?.number, let num2 = $1.score?.number else {
        return false
    }
    return num1 > num2
})
print(sortedObj2)
// Print: obj3, obj1, obj4, obj2 and obj5

希望这有助于以这种方式对阵列进行排序

data2.sort(by:{$0.score?.number > $1.score?.number})

您尝试了什么,是否阅读了
阵列的文档?