IOS/Objective-C:操作数组的维度

IOS/Objective-C:操作数组的维度,ios,nsarray,Ios,Nsarray,为了在核心数据中搜索两个实体,我想从这两个实体中创建一个数组。从一个实体创建一个对象数组很容易,也可以使用valueforkey创建一个只有一个属性的数组。可以使用arrayByAddingObjectsFromArray将单属性数组合并为一个长属性数组。但是,我需要从包含名称和id的每个实体创建两个属性数组 有没有人知道一种方法可以像在R或许多其他语言中那样删除属性或字段,这样我就可以创建只包含两个属性的数组,然后将它们添加到一起 起始数组具有不同数量的属性,即 cars({

为了在核心数据中搜索两个实体,我想从这两个实体中创建一个数组。从一个实体创建一个对象数组很容易,也可以使用valueforkey创建一个只有一个属性的数组。可以使用arrayByAddingObjectsFromArray将单属性数组合并为一个长属性数组。但是,我需要从包含名称和id的每个实体创建两个属性数组

有没有人知道一种方法可以像在R或许多其他语言中那样删除属性或字段,这样我就可以创建只包含两个属性的数组,然后将它们添加到一起

起始数组具有不同数量的属性,即

cars({
        make = "Ford";
        model = "Focus";
        year = "2010";
        carid = 127;
    },
        {
       make = "Chevy";
        model = "Camaro";
        year = "2014";
        carid = 126;
        })
 bikes({
        make = "Giant";
        year = "2010";
        bikeid = 33;
    },
        {
       make = "Trek";
        year = "2014";
        bikeid = 34;
        })
使用键的值,如中所示:

NSMutableArray * carmakes = [[cars valueForKey:@"make"] mutableCopy];
我可以将数组转换为

cars(
    "Ford",
    "Chevy",
    "Toyota")

bikes(
    "Giant",
    "Trek",
    "Cannondale")
并使用:

vehicles=[_bikes arrayByAddingObjectsFromArray:_cars];
将这些结合起来:

vehicles(
"Giant",
    "Ford",
    "Chevy",
    "Toyota",
    "Giant",
    "Trek",
    "Cannondale")
但是,没有ID。如何创建一个如下所示的数组:

vehicles({
        make = "Ford";
       id = 127;
    },
        {
       make = "Chevy";
        id = 126;
         },
        {
       make = "Giant";
        id = 33; },
        {
       make = "Trek";
        id = 34;})
编辑:

以下是属性在其托管对象文件中的显示方式:

@interface Cars : NSManagedObject
@property (nonatomic, retain) NSNumber * carid;
@property (nonatomic, retain) NSString * make;
@end
该数组由以下代码创建:

   NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Cars"];
    fetchRequest.resultType = NSDictionaryResultType;

    NSError *error      = nil;
    self.managedObjectContext = [Model sharedInstance].managedObjectContext;

    NSArray *results    = [self.managedObjectContext executeFetchRequest:fetchRequest
                                                                   error:&error];
    NSMutableArray* cars = [NSMutableArray arrayWithArray:results];

    return cars;

谢谢你的建议。

不要想得太多。创建一个方法来组合这两个数组

更新

从您得到的错误中,我可以看出您没有字典数组,而是CoreData实体。在不知道游戏中的实体的情况下,这只是猜测。我将使用
汽车
自行车
,但返回字典。您可能需要更新此项才能使用
车辆
实体

- (NSArray *)arrayByCombiningCars:(NSArray *)cars bikes:(NSArray *)bikes {
    NSMutableArray *result = [NSMutableArray arrayWithCapacity:cars.count + bikes.count];

    for (Cars *car in cars) {
        NSAssert(car.make && car.carid, @"car must have a make and cardid.");
        NSDictionary *vehicle = @{@"make":car.make, @"id": car.carid};
        [result addObject:vehicle];
    }

    for (Bikes *bike in bikes) {
        NSAssert(bike.make && bike.bikeid, @"bike must have a make and bikeid.");
        NSDictionary *vehicle = @{@"make":bike.make, @"id": bike.bikeid};
        [result addObject:vehicle];
    }

    return [result copy];
}

明亮的一旦你解释过,就简单了。谢谢。本以为这会起作用,但我在'NSInvalidArgumentException'的car[@“make”]上遇到错误,原因:'-[Cars objectforkeydsubscript::]:无法识别的选择器已发送到实例。Make是一个属性。当我尝试记录汽车[@“make”]时,也会发生错误。数组是否可能不包含字典或可能出错的内容?这是我记录car时得到的结果:(实体:Cars;id:0xd000000002dc0000;数据:{make=“Ford”;carid=6729;timecreated=nil;wasdelected=nil;})哦,等等,这是核心数据。请用所需的类型更新问题。汽车、自行车和车辆(如果需要)。当你说类型时,你是指数据类型吗?Make是NSString,carid和bikeid是NSNumber。