簡體   English   中英

IOS/Objective-C:操作數組的維度

[英]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 實體。 在不知道游戲中的實體的情況下,這只是猜測。 我將使用CarsBikes ,但返回一個字典。 您可能需要更新它以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM