簡體   English   中英

獲取NSDictionary的NSArray的值列表

[英]Get list of Values for an NSArray of NSDictionary

我有以下NSArray:

NSArray myArray = @[@{@300:@"5 min"},
                    @{@900:@"15 min"},
                    @{@1800:@"30 min"},
                    @{@3600:@"1 hour"}];

我想要列出我的字典的價值清單:

@[@"5 min",@"15 min",@"30 min",@"1 hour"]

還有我的字典的關鍵列表:

@[@300, @900, @1800, @3600]

最好的方法是什么? 我當時在考慮謂詞,但我不知道如何使用它?

沒有一些代碼來顯示您將如何執行此操作,就很難確定您到底要做什么,並且這個問題中有些混亂。

首先,謂詞就是這樣-一個可以證明是對還是錯的陳述。 因此,謂詞可用於邏輯表達式中,包括在數據庫查詢中隱式使用的謂詞-例如Core Data。

如果我正確閱讀了您的問題,那不是您想要的。 您想要的是降低數據模型的復雜性,在過程中刪除一些多余的信息(有人希望)。 某種扁平化的字典數組。

很公平。

我還可以看到與謂詞的混淆是如何產生的-它們通常是使用鍵值編碼構造的。 眾所周知,KVC是一項非常強大的技術,可以完成您所追求的目標。 它只是與邏輯語句無關。

清除這些問題后,使用KVC,您可以做任何您想做的事,而不必大驚小怪。 它是這樣的:

NSArray *values = [myArray valueForKeyPath: @"@unionOfArrays.@allValues"];

NSArray *keys   = [myArray valueForKeyPath: @"@unionOfArrays.@allKeys"];

可能需要簡要說明:

我們想要的結果是

  1. 每個字典的所有值(或鍵),獲得值(或鍵)的數組的數組
  2. 然后,我們想將這些數組展平為單個數組。

要使用KVC從字典中獲取所有值(或鍵),特殊鍵分別為@allValues@allKeys

@unionOfArrays運算符對從@unionOfArrays的表達式獲得的數組進行並集,即將其展平為所需的數組。

為簡化編碼而付出的代價是,必須將KVC密鑰路徑與集合運算符一起使用,它們只是代碼中的字符串。 因此,您會從編譯器的語法中獲得任何幫助,並且它不會檢查您輸入的鍵是否在對象中存在。 同樣,例如,如果您鍵入錯誤或使用了錯誤的運算符,調試器和錯誤消息也無濟於事。

您可以使用字典屬性allValues來獲取字典的所有值。

根據您的情況嘗試此代碼

NSArray *myArray = @[@{@300:@"5 min"},
                     @{@900:@"15 min"},
                     @{@1800:@"30 min"},
                     @{@3600:@"1 hour"}];
NSMutableArray *arr = [NSMutableArray array];
for (NSDictionary *dict in myArray) {
    [arr addObject:[[dict allValues] objectAtIndex:0]];
}
NSLog(@"%@",arr);

注意:請確保每個詞典中只有一個值。 它將返回

[

5分鍾,

15分鍾

30分鍾,

1小時

]

@johnyu的答案在技術上是正確的,但是我看不到任何包含次循環的理由,尤其是如果數據結構保持不變的話。

NSArray *myArray = @[@{@300:@"5 min"},
                     @{@900:@"15 min"},
                     @{@1800:@"30 min"},
                     @{@3600:@"1 hour"}];

NSMutableArray *arrayOfValues = [NSMutableArray new];
NSMutableArray *arrayOfKeys = [NSMutableArray new];

for (NSDictionary *dictionary in myArray) {
    [arrayOfValues addObject:dictionary.allValues[0]];
    [arrayOfKeys addObject:dictionary.allKeys[0]];
}

NSLog(@"%@",arrayOfKeys);
NSLog(@"%@",arrayOfValues);

嘗試這個:

NSArray *myArray = @[@{@300:@"5 min"},
                    @{@900:@"15 min"},
                    @{@1800:@"30 min"},
                    @{@3600:@"1 hour"}];
NSMutableArray *keyArray = [[NSMutableArray alloc] init];
NSMutableArray *valueArray = [[NSMutableArray alloc] init];
for (NSDictionary *dictionary in myArray) {
    for (NSString *key in dictionary) {
        [keyArray addObject:key];
        [valueArray addObject:[dictionary objectForKey:key]];
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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