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