我有2个阵列.一个是600个对象的大型静态组,另一个是10个对象的小组.
我想在两个组之间采用任何常见对象并将它们放在一个新数组中.
因此,假设大组包含600个名为1到600的对象.较小的组包含9个对象:1,2,3,4,5,6,a,b,c.我希望能够创建一个包含对象1,2,3,4,5,6的新数组.
做这个的最好方式是什么?
我有一个NSMutableArray用字符串对象填充的.为简单起见,我们会说对象是一个人,每个人对象都包含有关该人的信息.
因此,我将有一个填充了person对象的NSMutableArray:
person.firstName
person.lastName
person.age
person.height
Run Code Online (Sandbox Code Playgroud)
等等.
最初的数据源来自Web服务器,并在我的应用程序加载时填充并完成它与服务器的初始化.我的应用程序会定期轮询服务器以获取最新的名称列表.
目前我正在创建一个NSArray结果集,清空NSMutableArray然后在销毁对象之前重新填充NSMutableArraywith NSArray结果NSArray.
这对我来说在几个层面上看起来效率低下,并且还给我一个丢失表行参考的问题,我可以解决这个问题,但可能会为我自己创造更多的工作.
低效率似乎是我应该能够比较两个数组并最终得到过滤NSArray.然后我可以将过滤后的集添加到NSMutableArray.这意味着我可以简单地将新数据附加到NSMutableArray而不是将所有内容丢弃并重新填充.
相反,我需要反向执行相同的过滤器,以查看是否有需要从中删除的记录NSMutableArray.
有没有办法以更有效的方式做到这一点?我是否忽略了一些涉及更简单技术的文档中的某些内容?
当我清空NSMutableArray并重新填充时,我有一个问题,任何引用表都会丢失它们选择的行状态.我可以跟踪它并重新选择它,但我的理论是使用某种形式的比较和添加对象并删除对象而不是在一个块中处理整个数组可能意味着我保留我的行引用(假设该项目不是当然删除了).
任何建议或帮助非常感谢.
更新
在我每次比较每个订单项时,快速枚举是否同样快?这似乎是一个昂贵的操作,但使用最后的快速枚举代码,它可能非常有效...
解
我最终选择了Abizem的建议.在处理大量数据集时,创建数组的可变副本和对象副本似乎比使用sbooth解决方案稍快一些.两者都很好用,我通过使用可变复制方法获得了更多优势.话虽如此,它确实让我睁开眼睛看着我以前没有看过的NSSet.
感谢您的反馈.
我想知道如何(如果可能的话)创建一个NSDictionary,它为每个键保存一个NSArray.
像这样的东西:
@"FirstKey" - [0],[1],[2],[3]
@"SecondKey" - [0],[1],[2],[3]
@"ThirdKey" - [0],[ 1],[2],[3]
@"FourthKey" - [0],[1],[2],[3]
希望你有这个想法,谢谢!
我有这个方法处理一些我似乎无法正确的数组.与alloc和init相关的东西.
- (void)addBookmark
{
// Get the user defaults object
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
// Load your bookmarks (editable array)
NSMutableArray *bookmarks = [[NSMutableArray alloc]init];
NSArray *bookmarksLoaded = [userDefaults arrayForKey:@"bookmarks"];
if (bookmarksLoaded != nil) {
[bookmarks initWithArray:bookmarksLoaded];
} else {
[bookmarks init];
}
// Add a bookmark
NSMutableDictionary *bookmark = [NSMutableDictionary new];
[bookmark setValue:@"value" forKey:@"name"];
[bookmark setValue:@"value" forKey:@"description"];
[bookmark setValue:@"value" forKey:@"code"];
[bookmarks addObject:bookmark];
// Save your (updated) bookmarks
[userDefaults setObject:bookmarks forKey:@"bookmarks"];
[userDefaults synchronize];
// Memory cleanup
[bookmarks release];
}
Run Code Online (Sandbox Code Playgroud) 我试图将单个数组对象(即多个值的nsdictionary)传递回我的主视图。
基本上,当我设置视图时,我将一些xml解析为字典数组。然后,我使用NSdictionary内部的值之一来设置表格视图,该值还用于设置字母滚动条和节标题。(这是通过我创建的方法完成的)
在该方法的结尾,我调用[self.tableView reloadData]; 每件事都完美地加载,一切都很好显示。
现在,我正在尝试设置它,以便在选择一个单元格时,我检查cell.textlabel内的值并将其用作谓词,以便一旦找到我想要的对应条目后就对我的词典数组进行检查将我创建的代表将该字典传递到主视图。
但是我收到一个错误,我认为可能是由于我的reloadData ..但不确定。这就是我的谓词。
NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K like %@",@"MANUFACTURER",cell.textLabel.text];
NSArray *filter = [myDataArray filteredArrayUsingPredicate:pred]; //error happens here
//check to see if the value is the correct one
NSLog(@"My Filtered array = %@", filter);
//once problem has been found set up the delegate here.
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息。
2011-10-31 10:43:57.333 code[5812:207] *** -[__NSArrayM filteredArrayUsingPredicate:]: message sent to deallocated instance 0x6874210
Run Code Online (Sandbox Code Playgroud)
如下所示,在NSXMLParser委托中创建myDataArray。
//。H
NSMutableArray *myDataArray;
}
@property (nonatomic, retain) NSMutableArray *myDataArray;
Run Code Online (Sandbox Code Playgroud)
//.m
#pragma mark - Parsing lifecycle
- (void)startTheParsingProcess:(NSData …Run Code Online (Sandbox Code Playgroud) 我有一个来自twitter REST API的json数据构建的NSArray.
NSArray *dict = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
NSLog (@"Element %@", [dict objectAtIndex: 1]);
Run Code Online (Sandbox Code Playgroud)
如何从数组中获取单个元素,其中一个数组索引项如下所示:
Element 1 = {
contributors = "<null>";
coordinates = "<null>";
"created_at" = "Tue Feb 07 11:15:08 +0000 2012";
entities = {
hashtags = (
);
urls = (
);
"user_mentions" = (
);
};
favorited = 0;
geo = "<null>";
id = 166842424398848000;
"id_str" = 166842424398848000;
"in_reply_to_screen_name" = "<null>";
"in_reply_to_status_id" = "<null>";
"in_reply_to_status_id_str" = "<null>";
"in_reply_to_user_id" = "<null>";
"in_reply_to_user_id_str" = "<null>";
place = …Run Code Online (Sandbox Code Playgroud) 我想只在数组已经不包含该对象时才将对象添加到数组中.如何在NSArray中对containsObject方法进行相反的操作?
我有一个NSArray,我想翻转它,即颠倒对象的顺序.
我可以通过创建一个for循环并移动所有对象来做到这一点.是否有一些不错的方法或技巧以另一种方式做到这一点?
我刚注意到一个令人惊讶的行为NSArray,这就是我发布这个问题的原因.
我刚刚添加了一个方法:
- (IBAction) crashOrNot
{
NSArray *array = [[NSArray alloc] init];
array = [[NSArray alloc] init];
[array release];
[array release];
}
Run Code Online (Sandbox Code Playgroud)
从理论上讲,这段代码会崩溃.但在我的情况下它永远不会崩溃!
我改变了NSArray,NSMutableArray但这次应用程序崩溃了.为什么会发生这种情况,为什么NSArray不崩溃和NSMutableArray崩溃?
我正在尝试检查视图控制器列表self.navigationController.viewControllers.
NSMutableArray *arrayOfControllers = [[NSMutableArray alloc] initWithObjects:self.navigationController.viewControllers, nil];
Run Code Online (Sandbox Code Playgroud)
作为示例,这将返回如下数组:
array -- (
(
"<HomeViewController: 0xb1aca10>",
"<LeftMenuViewController: 0xe751520>"
)
)
Run Code Online (Sandbox Code Playgroud)
我现在需要检查数组中是否存在HomeViewController我该怎么做?
我试过这样做,[arrayOfControllers containsObject:[MESHomeViewController class]])但这并不是真的.
uiviewcontroller nsmutablearray uinavigationcontroller nsarray ios
nsarray ×10
ios ×6
objective-c ×6
iphone ×3
cocoa-touch ×2
cocoa ×1
compare ×1
ios5 ×1
nsdictionary ×1
nspredicate ×1
uitableview ×1
xcode ×1