首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Swift中从其中一个索引( lng坐标)中对NSmutableArray进行分类

如何在Swift中从其中一个索引( lng坐标)中对NSmutableArray进行分类
EN

Stack Overflow用户
提问于 2016-06-08 21:27:06
回答 2查看 273关注 0票数 0

我是斯威夫特的新手,我知道如何在php中做到这一点,但是我迷上了所有的字典,我不知道如何在斯威夫特2中做到这一点。我在谷歌上搜索了一段时间,没有找到我需要的东西。

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

首先,我加载jSon内容:

代码语言:javascript
复制
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内容:

这就是我目前掌握的密码。我试图在一个新数组中加载排序的内容,但是在这个新数组中缺少一些键。

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

print(sortedArray)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-09 00:03:34

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

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

代码语言:javascript
复制
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()





}

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

代码语言:javascript
复制
var jsonArrData : [JsonArrayValues] = []

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

代码语言:javascript
复制
        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
        }

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

代码语言:javascript
复制
   //Reorder Array by shop distance from user...
    jsonArrData.sortInPlace({$0.distance < $1.distance}) 
票数 0
EN

Stack Overflow用户

发布于 2016-06-12 17:41:55

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

您没有提到如何访问网络;您可以查看AFNetworking阿拉莫火。后者还需要AlamofireJsonToObjects的帮助。

我还发现JSONExport非常有用。

你花在细节上的时间会少得多,就像在这个不幸的问题上一样,更多的是为了实现你更大的目标。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37713226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档