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

时间:2016-06-08 21:27:06

标签: ios arrays swift sorting swift2

我是swift的新手,我知道如何在php中做到这一点,但我迷失了所有这些词典,我不知道如何在swift 2中做到这一点.I&I已经谷歌搜索了一段时间,并没有找到我需要的东西。

我正在解析一个jSon并将它的值存储在循环中的NSMutableDictionary中,并且在循环结束时我将NSMutableDictionary存储在NSMutableArray中,所以最后我有一个NSMutableArray,它有43个元素,每个元素有大约10个键及其值。我需要从他们的#34;距离"中排序这43个元素。键和降序排序。我不知道这种当前方法是否可行。键的值"距离"是一个int数(米)。我不知道是否在NSMutable数组中使用NSMutableDictionary是正确的方法,但是我使用它是因为它可以有字符串键,而不是数字索引,所以对我而言#&# 39;更容易访问密钥"距离"比索引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

2 个答案:

答案 0 :(得分:0)

我设法用这种技术对数组进行排序:

为我的数组

创建了一个新类
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}) 

答案 1 :(得分:0)

任何非平凡项目的第一步应该是花一些时间在github上寻找可以简化问题的工具。在这种情况下,您会发现有很多工具可以简化在Swift中使用JSON的过程。我建议您特别关注EVReflectionGloss,尽管也有很多人使用SwiftyJSON

您没有提到您是如何访问网络的;你可以查看AFNetworkingAlamofire。后者也有AlamofireJsonToObjects来帮助。

我还发现JSONExport非常有用。

在这个不幸的问题中,您将花费更少的时间来处理细节,并且更多地继续实现更大的目标。