将NSMutableArray拆分为不同的数组

时间:2017-08-02 07:23:13

标签: objective-c nsmutablearray nsarray

全部,

在一个可变阵列中我有多个阵列,在每个阵列中我有多个词典,在词典中我有共同的值,基于我必须在下面组合一个数组/词典是样本数组

  

(
    {
        name = "attribute_Subject";
        value = English;
    },
    {
        name = "attribute_class";
        value = Fourth;
    },
),
(
    {
        name = "attribute_Subject";
        value = English;
    },
    {
        name = "attribute_class";
        value = Fifth;
    },
),
(
    {
        name = "attribute_Subject";
        value = Maths;
    },
    {
        name = "attribute_class";
        value = Fourth;
    },
),
(
    {
        name = "attribute_Subject";
        value = Science;
    },
    {
        name = "attribute_class";
        value = Fourth;
    },
),
(
    {
        name = "attribute_Subject";
        value = English;
    },
    {
        name = "attribute_class";
        value = Sixth;
    },
),
(
    {
        name = "attribute_Subject";
        value = Maths;
    },
    {
        name = "attribute_class";
        value = Sixth;
    },
),

如果您看到阵列我们在三个阵列中有英语,我希望将三个阵列放在一个单独的数组中,同样用于“科学”和数学

我们可以使用谓词吗?

任何人都可以提供帮助

2 个答案:

答案 0 :(得分:1)

我不完全确定我明白你的要求,但我认为这应该有所帮助:

<强>目标-C:

//1
NSMutableArray* englishArray = [[NSMutableArray alloc]init];
NSMutableArray* scienceArray = [[NSMutableArray alloc]init];
NSMutableArray* mathArray = [[NSMutableArray alloc]init];

//2
for(int i = 0; i < mainArray.count; i++){
    //3
    if([mainArray[i][0][@"value"] isEqual: @"English"]){
        //4
        [englishArray addObject:mainArray[i]];
    }
    else if([mainArray[i][0][@"value"] isEqual: @"Science"]){
        [scienceArray addObject:mainArray[i]];
    }
    else if([mainArray[i][0][@"value"] isEqual: @"Math"]){
        [mathArray addObject:mainArray[i]];
    }
}

上述代码说明:

  1. 创建3 NSMutableArrays来存储三个主题数组。
  2. 遍历mainArray中的所有数组(其中mainArray是您提供的完整数组)
  3. 要检查主题,首先在mainArray的索引i处访问数组。
  4. 例如。 mainArray [i]:

    (
        {
            name = "attribute_Subject";
            value = English;
        },
        {
            name = "attribute_class";
            value = Fourth;
        },
    ),
    

    3.(续)然后访问我们刚才访问的那个数组中的第一个元素。 (第一个元素是包含主题值的字典)

    例如。 mainArray [i] [0]:

    {
        name = "attribute_Subject";
        value = English;
    },
    

    3.(续)然后访问该词典的key @“value”的值。

    例如。 mainArray [i] [0] [@“value”]:

    @"English"
    

    4.如果该键等于我们需要的键,则将该数组添加到适当的主题数组中。

答案 1 :(得分:0)

我认为此代码会有所帮助。  NSLog(@&#34;%@&#34;,muteArray);

 NSArray *valuesArray = [muteArray valueForKey:@"value"];
    NSMutableArray *valuesArray1 = [[NSMutableArray alloc]init];
    for(NSArray *arr in valuesArray) {
        [valuesArray1 addObject:[arr objectAtIndex:0]];
    }
    NSOrderedSet *orderedSet = [NSOrderedSet orderedSetWithArray:valuesArray1];
    NSArray *arrayWithoutDuplicates = [orderedSet array];

    NSArray *filtered = [muteArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"value Contains[d] %@", [arrayWithoutDuplicates objectAtIndex:0]]];

使用for循环获取arrayWithoutDuplicates后,您可以获得单独的数组。