【问题标题】:Split NSMutableArray into different Arrays将 NSMutableArray 拆分为不同的数组
【发布时间】:2018-01-09 06:45:28
【问题描述】:

全部,

在可变数组中我有多个数组,在每个数组中我有多个字典,在字典中我有共同的值,根据值我必须对下面的数组/字典进行分组是示例数组

(

(
    {
        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;
    },
),

)

如果您看到我们在三个数组中有英语的数组,我希望这三个数组在一个单独的数组中,并且对于“科学”和数学也是如此

我们可以使用谓词吗?

谁能帮忙

【问题讨论】:

  • 你能显示预期的结果吗?

标签: objective-c nsmutablearray nsarray


【解决方案1】:

我认为这段代码会有所帮助。 NSLog(@"%@", 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 后,您可以获得单独的数组。

【讨论】:

  • 谢谢Phani,但我错过了一件事,我们不能直接与“英语”或其他任何内容进行比较,这些值来自服务器,我们不知道任何值。
  • 您需要根据主题名称分隔数组吗?
  • 没有,仅基于值
  • 您能否发布上述示例的例外结果。
【解决方案2】:

我不完全确定我理解您的要求,但我认为这应该会有所帮助:

目标-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 处的数组。

例如。主数组[i]:

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

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

例如。主阵列[i][0]:

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

3.(cont.2)然后访问该字典的键 @"value" 的值。

例如。 mainArray[i][0][@"value"]:

@"English"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 2019-03-16
    • 2023-03-12
    • 2020-09-16
    相关资源
    最近更新 更多