3

サーバーからこの種のデータの配列を取得しています(動的に変化します):

layers =     (
            {
        maximum = 4;
        minimum = 3;
        name = "layer 1";
    },
            {
        maximum = 19;
        minimum = 8;
        name = "layer 1";
    },
            {
        maximum = 1;
        minimum = 1;
        name = "layer 38";
    },
            {
        maximum = 4;
        minimum = 1;
        name = "layer 3";
    },
            {
        maximum = 24;
        minimum = 15;
        name = "layer 3";
    }
);

この場合、1 つの配列に 5 つのオブジェクトがあります。すべてのオブジェクトには、名前、最小値、および最大値があります。

コードには、最小値から最大値まで統計するループが必要です。たとえば、最小値が 10 で最大値が 13 の場合、値は 10、11、12、13 のようになります。

同じ名前のオブジェクトを 1 つのオブジェクトにまとめたい。先ほど言ったように、このデータは動的に変化します。任意のランダム データを持つことができますが、同じオブジェクトが存在する場合は、ここの「レイヤー 1」オブジェクトと「レイヤー 3」オブジェクトのように、次々に配置されます。

私が望む最終結果はこれです:

{
    name = "layer 1";
    values =         (
        3,
        4,
        8,
        9,
        10,
        11,
        12,
        13,
        14,
        15,
        16,
        17,
        18,
        19
    );
},
    {
    name = "layer 38";
    values =         (
        1,
        1
    );
},
    {
    name = "layer 3";
    values =         (
        1,
        2,
        3,
        4,
        15,
        16,
        17,
        18,
        19,
        20,
        21,
        22,
        23,
        24
    );
}

実行しようとしたコードは次のとおりです。

 layers = [[NSMutableArray alloc]init];


         NSMutableArray *layer = [[NSMutableArray alloc]init];
        NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
        [layers addObject:[mivne_shichva objectAtIndex:0]];  
                   for (int i=0; i<mivne_shichva.count; i++) {
         //   NSLog(@"i=%d",i)         
                if ([[[mivne_shichva objectAtIndex:i]valueForKey:@"name"]isEqualToString:[[layers objectAtIndex:i] valueForKey:@"name"]]) {


                    NSLog(@"EQUALS");
                   layer = [[NSMutableArray alloc]init];                          
                    int minimum = [[[mivne_shichva objectAtIndex:i]valueForKey:@"minimum"]intValue];
                    int maximum = [[[mivne_shichva objectAtIndex:i]valueForKey:@"maximum"]intValue];
                    for (int x = minimum; x<=maximum; x++) {

                        [layer addObject:[NSString stringWithFormat:@"%d",x]];
                        NSLog(@"%@",layer);

                 // dic = [[NSMutableDictionary alloc]init];
                    [dic setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"name"] forKey:@"name"];
                    [dic setValue:layer forKey:@"values"];
                    [layers addObject:dic];                              

                    }  
                }else {


                 layer = [[NSMutableArray alloc]init];  
                    int minimum = [[[mivne_shichva objectAtIndex:i]valueForKey:@"minimum"]intValue];
                    int maximum = [[[mivne_shichva objectAtIndex:i]valueForKey:@"maximum"]intValue];
                    for (int x = minimum; x<=maximum; x++) {

                       [layer addObject:[NSString stringWithFormat:@"%d",x]];
                        NSLog(@"%@",layer);

                    }

                  NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];  
                    [dic setValue:[[mivne_shichva objectAtIndex:i]valueForKey:@"name"] forKey:@"name"];
                        [dic setValue:layer forKey:@"values"];

                        [layers addObject:dic];  

                    NSLog(@"NOT EQUALS");
                }



        }

しかし、私はそれを機能させる方法を理解していません...

任意のコードとヘルプを事前に感謝します!

4

2 に答える 2

1

sortedArrayDict にはkey、Layer# として、およびvalue同じレイヤーに基づいてソートおよびマージされた値を持つ配列として含まれています。

レイヤ クラス :

@interface Layer : NSObject

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

@end

#import "AppDelegate.h"
#import "Layer.h"

@implementation AppDelegate

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

        _finalDictionary=[NSMutableDictionary new];

        Layer *layer1=[Layer new];
        layer1.name=@"Layer 1";
        layer1.minimum=3;
        layer1.maximum=4;

        Layer *layer2=[Layer new];
        layer2.name=@"Layer 1";
        layer2.minimum=8;
        layer2.maximum=19;

        Layer *layer3=[Layer new];
        layer3.name=@"Layer 38";
        layer3.minimum=1;
        layer3.maximum=1;

        Layer *layer4=[Layer new];
        layer4.name=@"Layer 1";
        layer4.minimum=2;
        layer4.maximum=4;

        Layer *layer5=[Layer new];
        layer5.name=@"Layer 3";
        layer5.minimum=24;
        layer5.maximum=15;

        _initialArray=[[NSMutableArray alloc]initWithObjects:layer1,layer2,layer3,layer4,layer5, nil];

    }
    return self;
}

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

    for (Layer *layer in _initialArray) {
        if ([_finalDictionary objectForKey:layer.name]) {
            //append array
            NSMutableArray *array=[_finalDictionary objectForKey:layer.name];
            [array addObject:[NSNumber numberWithInteger:[layer minimum]]];
            [array addObject:[NSNumber numberWithInteger:[layer maximum]] ];
        }
        else{
            //add new key
            NSMutableArray *array=[NSMutableArray new];
            [array addObject:[NSNumber numberWithInteger:[layer minimum]]];
            [array addObject:[NSNumber numberWithInteger:[layer maximum]] ];
            [_finalDictionary setObject:array forKey:layer.name];
        }
    }

    //sorting
    for (int i=0; i<_finalDictionary.count; i++){
        NSString *dict=[[_finalDictionary allKeys] objectAtIndex:i];
        NSArray *arrayToSort=[_finalDictionary objectForKey:dict];
        NSArray *sortedArray=[arrayToSort sortedArrayUsingSelector:@selector(compare:)];
        [_finalDictionary setObject:sortedArray forKey:dict];
    }

    //printing
    for (NSDictionary *dict in _finalDictionary) {
        NSLog(@"Label: %@",dict);
        for (Layer *layer in [_finalDictionary objectForKey:dict]) {
            NSLog(@"Value: %@",layer);
        }
    }
}

出力:

2012-12-20 18:45:32.344 MergeArray[1357:403] Label: Layer 1
2012-12-20 18:45:32.346 MergeArray[1357:403] Value: 2
2012-12-20 18:45:32.347 MergeArray[1357:403] Value: 3
2012-12-20 18:45:32.347 MergeArray[1357:403] Value: 4
2012-12-20 18:45:32.348 MergeArray[1357:403] Value: 4
2012-12-20 18:45:32.349 MergeArray[1357:403] Value: 8
2012-12-20 18:45:32.349 MergeArray[1357:403] Value: 19
2012-12-20 18:45:32.350 MergeArray[1357:403] Label: Layer 38
2012-12-20 18:45:32.350 MergeArray[1357:403] Value: 1
2012-12-20 18:45:32.351 MergeArray[1357:403] Value: 1
2012-12-20 18:45:32.352 MergeArray[1357:403] Label: Layer 3
2012-12-20 18:45:32.360 MergeArray[1357:403] Value: 15
2012-12-20 18:45:32.362 MergeArray[1357:403] Value: 24
于 2012-12-20T12:43:09.800 に答える