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を使用します。しかし、NSLogの出力には何も表示されませんでした。NSMutableDictionaryの出力は、4つの発見を示しました。


編集:

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. インデックスと文字列の 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:ことは、その各アイテムにNSArray送信することと同じです。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 に答える