我的代码:
NSArray *array = //objects here
NSMutableArray *mutarray = [[NSMutableArray alloc] init];
for (NSString *s in array)
{
NSRange ran = [s rangeOfString:@"abc"];
if (ran.location != NSNotFound)
{
int inde = [array indexOfObject:s];
[mutarray setValue:[NSNumber numberWithInt:inde] forKey:s];
}
}
NSLog (@"mutarray: %@", mutarray);
我尝试过NSMutableDictionary,但内容是无序的,所以我更喜欢NSMutableArray有序地存储值和键。但NSLog的输出什么也没有显示,到底是什么? NSMutableDictionary的输出显示了四个发现。
编辑:
我甚至在NSLog前面尝试过这段代码,但没有显示:
[mutarray setValue:@"aha" forKey:@"jaha"];
编辑: 伙计们,谢谢你的回答!现在我明白了。但问题是我将数字存储为值和字符串作为键。我有一个无序的NSMutableDictionary。我还没弄明白我应该怎么订购它。我有我使用的代码,但没有正确编写:
NSInteger intSort(id num1, id num2, void *context)
{
int v1 = [num1 intValue];
int v2 = [num2 intValue];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
}
在其他方法中:
NSArray *ordered = [[mutdic allValues] sortedArrayUsingFunction:intSort context:NULL];
NSLog (@" ordered: %@", ordered);
输出仅显示:
2011-08-29 22:36:03.998 scanner2[32359:207] ordered: (
1,
5,
9,
16
)
输出应按数字顺序显示:
2011-08-29 22:36:03.992 scanner2[32359:207] mutdic: 5 jam (geologi) en
2011-08-29 22:36:03.993 scanner2[32359:207] mutdic: 9 jax. (geologi)jammen
2011-08-29 22:36:03.994 scanner2[32359:207] mutdic: 1 beta (geologi).
2011-08-29 22:36:03.995 scanner2[32359:207] mutdic: 16 .(geologi),be;ta;
答案 0 :(得分:6)
NSMutableArray
不存储键/值对,它只存储对象。要将对象添加到数组,请使用-addObject:
方法。
使用数组存储有序的对象列表。当您需要查找给定某个键的对象时,请使用字典。如果您想要字典键的有序列表,请使用
NSArray* orderedKeys =
[[myDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];
修改:还有几个选项。
只需存储索引数组,然后在主array
字符串中查找值。
for (NSUInteger i = 0; i < [array count]; ++i)
{
NSString* s = [array objectAtIndex:i];
NSRange ran = [s rangeOfString:@"abc"];
if (ran.location != NSNotFound)
{
[mutarray addObject:[NSNumber numberWithInt:i]];
}
}
for (NSNumber* index in mutarray)
{
NSLog(@"Found %@:%@", index, [array objectAtIndex:[index intValue]]);
}
存储索引和字符串的二维数组:
for (NSUInteger i = 0; i < [array count]; ++i)
{
NSString* s = [array objectAtIndex:i];
NSRange ran = [s rangeOfString:@"abc"];
if (ran.location != NSNotFound)
{
[mutarray addObject:
[NSArray arrayWithObjects:[NSNumber numberWithInt:i],
s,
nil]];
}
}
答案 1 :(得分:3)
NSArray
是一个有序的对象集合。它不是对象的键值映射。在setValue:forKey:
上拨打NSArray
与向其每个项目发送setValue:forKey:
相同。
答案 2 :(得分:1)
这个setValue:ForKey:方法不是来自NSMutableArray,它是NSKeyValueCodingProtocol
在您的情况下,由于您需要字典中的有序结果,因此您可以查看以下方法:
- keysSortedByValueUsingSelector: - keysSortedByValueUsingComparator: - keysSortedByValueWithOptions:usingComparator:
如果需要对值进行排序,只需使用返回数组的allKeys即可。您可以使用以下任何方法对数组进行排序:
- sortedArrayHint - sortedArrayUsingFunction:context: - sortedArrayUsingFunction:context:提示: - sortedArrayUsingDescriptors: - sortedArrayUsingSelector: - sortedArrayUsingComparator: - sortedArrayWithOptions:usingComparator:
答案 3 :(得分:1)
看起来您想要存储有序的对列表。所以NSArray的NSArray
for (NSString *s in array)
{
NSRange ran = [s rangeOfString:@"abc"];
if (ran.location != NSNotFound)
{
int inde = [array indexOfObject:s];
NSArray* pair = [NSArray arrayWithObjects:[NSNumber numberWithInt:inde],s,nil];
[mutarray addObject: pair];
}
}