Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Swift 在大型json文件中搜索特定的键值对_Swift - Fatal编程技术网

Swift 在大型json文件中搜索特定的键值对

Swift 在大型json文件中搜索特定的键值对,swift,Swift,我试图找出在Swift 2中搜索大型json文件的最佳方法。json文件如下所示: [ { "Name": "Tom", "Job": "Plumber" }, { "Name": "Bill", "Job": "Electrician" } ] 因此,字典中的所有键基本上都是相同的,但对是不同的(或者可能不同) 我试图找到一个在本例中等于“Bill”或“Tom”的值,但我不知道这些个体在数组中的索

我试图找出在Swift 2中搜索大型json文件的最佳方法。json文件如下所示:

[
    {
        "Name": "Tom",
        "Job": "Plumber"
    },
    {
        "Name": "Bill",
        "Job": "Electrician"
    }
]
因此,字典中的所有键基本上都是相同的,但对是不同的(或者可能不同)

我试图找到一个在本例中等于“Bill”或“Tom”的值,但我不知道这些个体在数组中的索引是什么

我目前正在使用增量for循环将数组的索引增加1,在for循环中使用if语句查看键:“Name”是否有一个==“Bill”或“Tom”的对

我的代码可以工作,但由于json文件非常长,因此解析数据和获得结果需要花费很长时间。有没有更快的方法?我不确定这是否值得一提,但我在项目中使用了SwiftyJSON和Alamofire


谢谢

您可以简化代码,但减少工作量并不是那么简单。如果你有一个大的无序列表,你需要扫描它,直到你找到一个匹配的。每个条目都需要字符串比较,这很慢。如果对数组进行了排序,则可以使用a来更快地找到答案。因此,如果您希望经常搜索此列表,那么最好先对其进行排序。如果您的列表没有排序,那么您的需求基本上需要大量的工作

简化代码将类似于:

// Assuming the data is in an array named "people":
let predicate = NSPredicate(format: "Name = %@", "Bill")
let results = people.filteredArrayUsingPredicate(predicate)
但这仅仅意味着搜索列表是由框架完成的,而不是由您完成的

根据你的应用程序正在做什么,你可能想考虑将这些数据保存在核心数据中。它针对搜索匹配等操作进行了优化。更不用说,您不必将整个列表保存在内存中。

在大型阵列上使用
过滤器应该比增量For in循环至少快一点

Swift阵列版本:

let peopleNamedTom = arrayOfPeople.filter { $0["Name"] == "Tom" }
let peopleNamedTom = arrayOfPeople.filter { $1["Name"] == "Tom" }
SwiftyJSON数组版本:

let peopleNamedTom = arrayOfPeople.filter { $0["Name"] == "Tom" }
let peopleNamedTom = arrayOfPeople.filter { $1["Name"] == "Tom" }
如果不幸的是,在您的情况下,它没有明显的更快,我发现它比这个任务的循环更方便

还请注意,SwiftyJSON对象增加了开销,并且比本机Swift集合的迭代速度慢。如果您的JSON模型很简单,那么只使用NSJSONSerialization和Swift数组而不是SwiftyJSON可能会使您受益匪浅