我有一个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.
感谢您的反馈.
我已经NSMutableArray *mutArray = [[NSMutableArray alloc]initWithObjects:obj1,obj2,obj3,nil];
和每个对象有姓名,职务,地址,但是我想表明在其他的NSMutableArray这说明以相反的顺序mutArray则意味着OBJ 3,obj2的&然后OBJ1,无我是怎么做的.
我正在尝试使用NSMutableArray的NSMutableArray存储数组int [9] [9],其中我存储了数组中的81个整数:
- (void)awakeFromNib {
// initialization matrix
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
matrix[i][j] = 0;
}
}
// Creating NSMutableArray instance
TGrid = [NSMutableArray arrayWithCapacity:10];
[self saveGrid];
}
- (void)saveGrid {
NSNumber *aInt;
NSMutableArray *Grid = [NSMutableArray arrayWithCapacity:81];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
aInt = [NSNumber numberWithInt:matrix[i][j]];
[Grid …Run Code Online (Sandbox Code Playgroud) 我想在我的数组中做一些计算和比较
假设我的数组很简单:
NSMutableArray *array;
array = [[NSMutableArray alloc] init];
[array addObject:[NSNumber numberWithInt:1]];
[array addObject:[NSNumber numberWithInt:2]];
[array addObject:[NSNumber numberWithInt:2]];
[array addObject:[NSNumber numberWithInt:3]];
[array addObject:[NSNumber numberWithInt:2]];
Run Code Online (Sandbox Code Playgroud)
什么是一种优雅而聪明的方法来检查一个数字是否在这个数组内重复2,3,4或5次.(寻找聪明而有活力的东西......)
当我尝试向NSMutableArray插入一个对象时,我收到一个'Program received signal:SIGABRT'错误,但是我不明白为什么.
这是我的代码,特别insertObject:value是导致错误的代码.
NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary];
[myDictionary setValue:valueName.text forKey:kValueName];
[myDictionary setObject:subValuesList forKey:kSubValuesList];
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
int position = appDelegate.position;
NSMutableArray *valuesList = [[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray];
[valuesList insertObject:myDictionary atIndex:position];
Run Code Online (Sandbox Code Playgroud) 编辑:我将arc4random()替换为arc4random_uniform()以进行修复
我正在使用试飞来监控崩溃.一直在修复bug,但是我遇到了这个bug,我不知道为什么索引这么大.
-[__NSArrayM objectAtIndex:]: index 4294967295 beyond bounds for empty array
Run Code Online (Sandbox Code Playgroud)
很可能这就是bug的地方
for (NSUInteger i = 0; i < count; ++i) {
// Select a random element between i and end of array to swap with.
int nElements = count - i;
int n = (arc4random() % nElements) + i;
[randomName exchangeObjectAtIndex:i withObjectAtIndex:n];
[randomImgName exchangeObjectAtIndex:i withObjectAtIndex:n];
[randomID exchangeObjectAtIndex:i withObjectAtIndex:n];
}
Run Code Online (Sandbox Code Playgroud)
这引起了崩溃
//Frog Name Caption
NSString * tempCaption = [defaultFrogImageCaption objectAtIndex:[defaultFrogImageCaption count]-1];
self.dFrogID = [defaultFrogID objectAtIndex:[defaultFrogID count]-1];
Run Code Online (Sandbox Code Playgroud)
我相信这是错误,但我不知道如何解决错误.
感谢所有的评论和帮助
-(void)defaultFrogSetup
{ …Run Code Online (Sandbox Code Playgroud) 我目前正试图NSMutableArray根据它的一个对象的属性来获取我的索引.
我有一个像这样的xml结构:
<timeperiod>
<Day>
<Date>20120325</Date>
</Day>
<Day>
<Date>20120326</Date>
</Day>
</timeperiod>
Run Code Online (Sandbox Code Playgroud)
现在,假设xml结构包含一个月中的每一天.
Day和它的所有属性都被添加到了NSMutableArray.
我想要的是:根据日期获取数组的索引.
我在伪代码中想象这样的东西:
-(NSInteger)getIndexFromObjectProperty:(NSString *)property{
// Givf index from array where date is for example 20120310
//pseudo
Return [myClassObject.ObjectArray indexFromProperty:property];
}
Run Code Online (Sandbox Code Playgroud)
我发现了这一点:按对象的属性对NSMutableArray进行排序
这将从属性中排序,但如何从属性0_0获取索引
我还发现了这个:从具有某些提供属性值的对象数组中获取索引的函数 如果语法工作开箱即可帮助很多:(
任何提示和/或指示将受到高度赞赏.
提前致谢.
编辑我正在尝试给出的答案.将获得更新.
编辑2:办公室正在把我扔掉,因为他们把建筑物锁定了......明天我会回复你的...
我创建了一个数组,两个词典和一个tableview.tableview应显示数组的内容,该数组包含字典数据.当我尝试使用"[mArray addObject:(mDictionary)];"显示它时 它抛出异常,但如果我使用"[mArray addObject:[mDictionary objectForKey:@"firstname"]];" 它的工作正常.
你能帮助我理解它为什么会发生并且不能在不使用"objectForKey"的情况下显示字典值吗?
这是我的"ViewController.m".
#import "ViewController.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
mArray = [[NSMutableArray alloc]init];
mDictionary = [[NSMutableDictionary alloc]init];
[mDictionary setValue:@"shanu" forKey:@"firstname"];
[mDictionary setValue:@"kumar" forKey:@"lastname"];
mDictionary2 = [[NSMutableDictionary alloc]init];
[mDictionary2 setValue:@"hgjghjgf" forKey:@"firstname1"];
[mDictionary2 setValue:@"ghjgjgfj" forKey:@"lastname1"];
[mArray addObject:mDictionary];
[mArray addObject:mDictionary2];
CGRect frame = self.view.frame;
UITableView *tableView = [[UITableView alloc]initWithFrame:frame style:UITableViewStylePlain];
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
tableView.backgroundColor = [UIColor cyanColor];
tableView.separatorColor = [UIColor blackColor];
tableView.delegate = self;
tableView.dataSource = self;
[self.view addSubview:tableView];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section …Run Code Online (Sandbox Code Playgroud) 我有一个字符串如下:
NSString *str = @"abcd,efgh";
Run Code Online (Sandbox Code Playgroud)
现在我想将此字符串转换为NSMutableArray之类的
NSMutableArray *arr = {abcd,efgh};
Run Code Online (Sandbox Code Playgroud)
那怎么办呢?
任何帮助,将不胜感激.
我尝试将一些存储NSMutableDictionaries到NSMutableArray一个for循环中:
NSMutableArray *productsIdAndQuantities = [[NSMutableArray alloc]init];
NSMutableDictionary *element = [[NSMutableDictionary alloc]init];
for (id object in shoppingArray) {
[element setObject:[object valueForKey:@"proId"] forKey:@"id"];
[element setObject:[object valueForKey:@"qty"] forKey:@"quantity"];
NSLog(@"%@",element);//tested, it's different on every iteration
[productsIdAndQuantities addObject:element];
}
Run Code Online (Sandbox Code Playgroud)
循环结束后,我尝试调试productsIdAndQuantities,刚出来它包含上面循环的项目的确切数量,但有一个值.
这就是我的意思:
在循环内部(NSLog(@"%@",element);):
{
id = 13293;
quantity = "-2";
}
{
id = 12632;
quantity = "-5";
}
Run Code Online (Sandbox Code Playgroud)
循环之后(NSLog(@"%@",productsIdAndQuantities);相同的值!!!!!):
(
{
id = 12632;
quantity = "-5";
},
{
id = 12632;
quantity = "-5"; …Run Code Online (Sandbox Code Playgroud) nsmutablearray ×10
objective-c ×7
iphone ×6
ios ×3
arc4random ×1
cocoa ×1
compare ×1
math ×1
nsarray ×1
nsnumber ×1
nsstring ×1
reverse ×1
sigabrt ×1
sorting ×1
xcode ×1