0

サーバーからのデータを含む配列があります。サーバーの応答を変更できません。

{
    maximum = 30;
    minimum = 1;
    name = "Layer 1";
},
    {
    maximum = 60;
    minimum = 45;
    name = "Layer 1";
},
    {
    maximum = 60;
    minimum = 45;
    name = "Layer 2";
}

この配列には 3 つのオブジェクトがあります。そのうちの 2 つは同じ名前ですが、最小値と最大値が異なります。重複しない配列を作成したいので、たとえば、配列に「レイヤー1」、「レイヤー2」の2つのオブジェクトがあります。レイヤ 1 には 2 つの最小値と最大値があります。

どのように見えるか:

{

    name = "Layer 1"; value = [{maximum = 30;
    minimum = 1},{ maximum = 60;
    minimum = 45}];
},
    {
    maximum = 60;
    minimum = 45;
    name = "Layer 2";
}

インデックス「i」のオブジェクトの「名前」がインデックス「i + 1」のオブジェクトの「名前」と等しいかどうかを確認しようとしましたが、クラッシュし、「境界を超えています(2):

rows = [mivne_shichva count];

         NSMutableArray *layers = [[NSMutableArray alloc]init];
        NSMutableDictionary *layer = [[NSMutableDictionary alloc]init];

        for (int i = 0; i<rows; i++) {
            if ([[[mivne_shichva objectAtIndex:i]valueForKey:@"name"] isEqualToString:[[mivne_shichva objectAtIndex:i+1]valueForKey:@"name"]]) {
                NSLog(@"name equals to name in i+1");
            }
            [layer setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"name"] forKey:@"name"];
            [layer setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"minimum"] forKey:@"minimum"];
            [layer setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"maximum"] forKey:@"maximum"];

            [layers addObject:layer];

            NSLog(@"layers :::: %@",layers);            
        }
4

1 に答える 1

1

これをチェックしてください、ロジックは次のとおりです

最終結果は「辞書」になります。「ディクショナリ」キーには「レイヤ 1」という名前が含まれています。「ディクショナリ」値には「配列」が含まれています。「配列」には「MinMax」のオブジェクトが含まれています。

MinMax クラス:

@interface MinMax : NSObject

@property(strong)NSString *minimum;
@property(strong)NSString *maximum;

@end

MyClass クラス:

@interface MyClass : NSObject

@property(strong) NSString *name;
@property(strong) NSString *minimum;
@property(strong) NSString *maximum;

@end

そしてデモの実装:

- (id)init
{
    self = [super init];
    if (self) {
        _finalDict=[NSMutableDictionary new];

        MyClass *obj1=[MyClass new];
        obj1.name=@"Layer 1";
        obj1.minimum=@"1";
        obj1.maximum=@"30";

        MyClass *obj2=[MyClass new];
        obj2.name=@"Layer 1";
        obj2.minimum=@"45";
        obj2.maximum=@"60";

        MyClass *obj3=[MyClass new];
        obj3.name=@"Layer 2";
        obj3.minimum=@"45";
        obj3.maximum=@"60";

        _fromServerArrays=[[NSMutableArray alloc]initWithObjects:obj1, obj2, obj3, nil];

    }
    return self;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{

    for (MyClass *obj in _fromServerArrays) {
        NSLog(@"From server  : %@, %@, %@", obj.name, obj.minimum, obj.maximum);
    }


    for (MyClass *myClassObj in _fromServerArrays) {
        MinMax *mmObj=[MinMax new];
        mmObj.minimum=myClassObj.minimum;
        mmObj.maximum=myClassObj.maximum;

        if ([_finalDict objectForKey:myClassObj.name]) {
            NSMutableArray *getArray=[_finalDict objectForKey:myClassObj.name];
            [getArray addObject:mmObj];
        }
        else{
            NSMutableArray *array=[NSMutableArray new];
            [array addObject:mmObj];
            [_finalDict setObject:array forKey:myClassObj.name];
        }
    }


    for (NSDictionary *dict in _finalDict) {
        NSLog(@"%@",dict);
        for (MinMax *mmObj in [_finalDict objectForKey:dict]) {
            NSLog(@"%@, %@", mmObj.minimum, mmObj.maximum);
        }
    }
}

出力:

From server  : Layer 1, 1, 30
From server  : Layer 1, 45, 60
From server  : Layer 2, 45, 60
Layer 1
1, 30
45, 60
Layer 2
45, 60
于 2012-12-18T11:55:27.870 に答える