- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个文本文件,大约有 200,000 行。每条线代表一个具有多个属性的对象。我只搜索对象的属性之一(唯一 ID)。如果我要查找的唯一 ID 与当前对象的唯一 ID 相同,我将读取该对象的其余值。
现在,每次我搜索一个对象时,我只是逐行读取整个文本文件,为每一行创建一个对象,然后看看它是否是我正在寻找的对象 - 这基本上是最低效的方法进行搜索。我想将所有这些对象读入内存,以便以后可以更有效地搜索它们。
问题是,执行此类搜索的最有效方法是什么? 200,000 个条目的 NSArray 是执行此操作的好方法吗(我对此表示怀疑)? NSSet 怎么样?使用 NSSet 是否可以只搜索对象的一个属性?
感谢您的帮助!
-- 瑞
最佳答案
@yngvedh 是正确的,因为 NSDictionary
的查找时间为 O(1)(正如映射结构所预期的那样)。然而,经过一些测试,您可以看到 NSSet
的查找时间也为 O(1)。这是我为此所做的基本测试:http://pastie.org/933070
基本上,我创建 1,000,000 个字符串,然后计算从字典和集合中检索 100,000 个随机字符串所需的时间。当我运行几次时,该集实际上看起来更快......
dict lookup: 0.174897
set lookup: 0.166058
---------------------
dict lookup: 0.171486
set lookup: 0.165325
---------------------
dict lookup: 0.170934
set lookup: 0.164638
---------------------
dict lookup: 0.172619
set lookup: 0.172966
就您的具体情况而言,我不确定这是否是您想要的。您说您希望将所有这些对象都存储在内存中,但是您真的需要它们全部,还是只需要其中的一些对象?如果是后者,那么我可能会通读该文件并创建一个对象 ID 到文件偏移映射(即,记住每个对象 ID 在文件中的位置)。然后,您可以查找所需的内容,并使用文件偏移量跳转到文件中的正确位置,解析该行,然后继续。这是 NSFileHandle 的工作。
关于cocoa - NSDictionary、NSArray、NSSet 和效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2703936/
我一直在尝试使用 CoreData 和 Swift 在关系中添加对象。我很茫然,我不明白为什么我的代码不起作用。我正在尝试向“团队”添加“事件”。我找不到已接受的答案(应该有效)和我的代码(无效)之间
我有两个 NSSet。一个包含所有用户 key ,另一个包含在线用户 key 。我想分两部分展示这个值。 Section 1-在线用户和section2-其他用户 我使用如下谓词完成了此操作。 NSS
我正在努力处理核心数据...有些事情我不明白,所以如果有人能帮助我,我将不胜感激!我有一个实体(食谱)与另一个实体(膳食)存在多对多关系。我想选择所有与一顿饭无关的食谱……所以我试过了: 代码: [m
这个问题在这里已经有了答案: Odd property declaration syntax containing angular brackets <> (2 个回答) 6年前关闭。 我已生成 NS
我有两个关系表。 在尝试保存产品的 ShopItem 类中: let productEntity = NSEntityDescription.entityForName("Product", inMa
我有一个 UITableView,它通过以下方式添加核心数据中的信息: 标题中添加了各种名称的“类别” 与类别相对应的名称应加载到类别下方的单元格中 现在,我的标题加载了正确的名称以及添加的正确数量的
当列出相同的 tableView 时,有时会发生这种错误,我的意思是有时是,有时不是。当我尝试检查检索到的 NSSet 是否包含任何对象时: if(coin.dublicates.count > 0)
众所周知,比较 float 时存在 float 精度问题。 此外,NSSet 使用相等比较来保持元素在其中的唯一性。 那么当 NSSet 存储其中包含 float/double 的 NSValues
我正在将数据与核心数据一起使用,并获得一个 NSNumber 的 NSSet...我的问题是如何轻松地将所有对象更改为 int 值?或者我可以直接从数据库中获取 int 值吗? 谢谢 最佳答案 NSS
假设我有 NSManagedObject Zoo,他得到了一个到名为 cats 的“Cat”的连接 oneToMany,这个连接是 NSSet。当我使用函数 'filteredSetUsingPred
我在产品实体和购物车实体之间存在一对多关系。 用户需要有机会从购物车中删除产品。 我这样获取产品: // Fetch request for "Product": NSFetchRe
我正在尝试处理 xCode 中的关系,但遇到了一些问题: 我想创建一个简单的 User 到 favoriteThing 关系。我创建了一个模型,因此每个用户看起来都是这样的: extension Us
我想过滤categoryId == value但我的谓词失败的地方。这是我的代码。 categoryList 是 VenueCategory 类的对象数组,categoryId 是 Category
很抱歉新手问题,但我们都在这一点上:) 我正在进行枚举以从 NSSet 中获取正确的对象,以将 Cell 的标题设置为 Set 中的对象,这是我的代码: // the object we wa
我有 2 个按钮:button1 和 button2。我想为每个触摸的相应按钮创建一个 NSSet,并希望在触摸按钮 2 时显示 set1 值,反之亦然。按下按钮 1 时仅打印 set 1,按下按钮
我从 CoreData 返回了一个 Customer 对象。我正在尝试计算 NSSet 中存在的所有 amount 属性的总和: extension Customer { //...
我从 Web 服务中获取了一些 JSON,其中包含我希望分解为元素的逗号分隔字符串。 因为这是多对多关系,所以我尝试将其作为 NSSet 获取。但是,json 本身似乎由字符串组成,因此我需要先将逗号
所以我有这个 NSSet 对象,直接来自 Core Data 关系。这个 NSSet 包含的对象都是同一基础对象的所有子类(我们称它为 RVSuperClass,它本身是 NSManagedObjec
为什么我做不到 NSLog(@"mySet count: %@", [mySet count]); 然后使用 NSSet? (如果我确实使用它,应用程序会因“EXC_BAD_ACCESS”而崩溃 我已
我的核心数据中有一个一对多的关系设置: Day > Transactions 一天对象将包含交易的 NSSet 和 Date。 在某些时候,我想获取最新的 Day 并通过一段时间(每月和每年)过滤其
我是一名优秀的程序员,十分优秀!