ios - 如何在 Swift 中从 NSmutableArray 的索引之一(lat lng 坐标)对 NSmutableArray 进行排序

标签 ios arrays swift sorting swift2

我是 swift 的新手,我知道如何在 php 中做到这一点,但我迷失了所有这些字典,我不知道如何在 swift 2 中做到这一点。我一直在谷歌搜索并没有找到我需要的东西。

我正在解析一个 jSon 并将其值存储在循环中的 NSMutableDictionary 中,在循环结束时我将 NSMutableDictionary 存储在 NSMutableArray 中,所以最后我有一个包含 43 个元素的 NSMutableArray,每个元素都有大约 10 个键及其值。我需要根据“距离”键对这 43 个元素进行排序,并按降序对它们进行排序。我不知道目前的方法是否可行。 “distance”键的值是一个 int 数字(米)。我不知道在 NSMutable 数组中使用 NSMutableDictionary 是否是正确的方法,但我使用它是因为可能有字符串键,而不是数字索引,所以对我来说访问键更容易“距离”比索引8...

首先我加载 json 内容:

private func parseJson(json : NSMutableArray, tableView : UITableView){

        var c : Int = 0
        for j in json {
            var jsonValues = NSMutableDictionary()

            //Create main value
            guard let value = j.valueForKey("value")?.valueForKey("value")! else{
                continue
            }

            //Get name
            guard let Name : String = (value.valueForKey("Name")?.valueForKey("en") as? String) else {
                continue
            }
jsonValues["name"] = Name

//more code like this....

            TableData.append(Name)
            nsDict.insertObject(jsonValues, atIndex: c)

            c += 1
        }

这是加载后我的 NSMutableArray 内容: enter image description here

enter image description here

这是我到目前为止的代码。我试图将排序后的内容加载到新数组中,但在这个新数组中缺少一些键。

//Reorder Array by shop distance from user...
var sortDescriptor:NSSortDescriptor = NSSortDescriptor(key: "distance", ascending: true)
var sortedArray : NSArray = nsDict.sortedArrayUsingDescriptors([sortDescriptor])//Crashes

print(sortedArray)

enter image description here

enter image description here

最佳答案

我已经成功地用这种技术对数组进行了排序:

为我的数组创建了一个新类

import Foundation
class JsonArrayValues  {

    init(){

    }
    var name = String()
    var distance = Float()
    var lat = Float()
    var lng = Float()
    var openingTime = String()
    var country = String()
    var code = String()
    var address = String()
    var categories = String()
    var city = String()
    var type = String()
    var brands = String()





}

我在循环之前实例化了一个:

var jsonArrData : [JsonArrayValues] = []

循环内的另一个,我在其中添加了值:

        var c : Int = 0
        for j in json {
            var jsonValues : JsonArrayValues = JsonArrayValues()

//Get name
            guard let Name : String = (value.valueForKey("Name")?.valueForKey("en") as? String) else {
                continue
            }
            jsonValues.name = Name
//more code...
jsonArrData.append(jsonValues)

            c += 1
        }

最后我能够调用函数来重新排序数组:

   //Reorder Array by shop distance from user...
    jsonArrData.sortInPlace({$0.distance < $1.distance}) 

关于ios - 如何在 Swift 中从 NSmutableArray 的索引之一(lat lng 坐标)对 NSmutableArray 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37713226/

相关文章:

ios - SwiftUI 工作表无限显示和隐藏

ios - Phonegap + iOS : how to play audio with Media API

java - 如何垃圾收集对象数组?

javascript - 在javascript中将typedarray复制到数组的最快方法?

arrays - 位标志数组的数据结构是什么?

ios - TableView 单元格和 TableView 标题 View 的大小

string - 如何在字符串 : Swift IOS 中最后一次出现字符后获取子字符串

ios - 迦太基解析错误

ios - Swift 错误消息 : Initializer for conditional binding must have Optional type, 而不是 '[CLBeacon]'

ios - AFNetworking 中的错误响应解析