1

我的代码:

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 有序地存储 Values 和 Keys。但是 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;
4

4 回答 4

6

NSMutableArray不存储键/值对,它只存储对象。要将对象添加到数组中,请使用-addObject:方法。

使用数组来存储对象的有序列表。当您需要查找给定某个键的对象时,请使用字典。如果您想要字典键的有序列表,请使用

NSArray* orderedKeys = 
    [[myDictionary allKeys] sortedArrayUsingSelector:@selector(compare:)];

编辑:还有几个选项。

  1. 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]]);
    }         
    
  2. 存储索引和字符串的二维数组:

    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]]; 
        } 
    }
    
于 2011-08-29T20:24:44.200 回答
3

NSArray是对象的有序集合。它不是对象的键值映射。调用setValue:forKey:anNSArray与发送setValue:forKey:到它的每个项目相同。

于 2011-08-29T20:26:15.520 回答
1

这个 setValue:ForKey: 方法不是来自 NSMutableArray,它是NSKeyValueCodingProtocol

在您的情况下,由于您想要从字典中排序结果,您可以查看以下方法:

– keysSortedByValueUsingSelector: – keysSortedByValueUsingComparator: – keysSortedByValueWithOptions:usingComparator:

如果您需要对值进行排序,只需使用返回数组的 allKeys 即可。您可以使用以下任何方法对数组进行排序:

– sortedArrayHint – sortedArrayUsingFunction:context: – sortedArrayUsingFunction:context:hint: – sortedArrayUsingDescriptors: – sortedArrayUsingSelector: – sortedArrayUsingComparator: – sortedArrayWithOptions:usingComparator:

于 2011-08-29T20:26:49.317 回答
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];
    } 
}
于 2011-08-29T23:09:11.343 回答