[英]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"];
可能需要簡要說明:
我們想要的結果是
要使用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.