[英]IOS/Objective-C: Manipulate dimensions of arrays
為了在 Core Data 中搜索兩個實體,我想創建一個從兩者中提取的數組。 從一個實體創建對象數組很容易,也可以使用 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 實體。 在不知道游戲中的實體的情況下,這只是猜測。 我將使用Cars
、 Bikes
,但返回一個字典。 您可能需要更新它以使用Vehicles
實體。
- (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];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.