您不會錯過任何東西。除了循環以外,沒有任何真正方便的方法。當然,任何解決方案的根源都是循環的,但如果有更多的「過濾」或重新安排的能力嵌入到NSArray
(/我謹慎地咳嗽並查看Python列表解析),那將是很好的選擇。
GitHub上的vikingosegundo's arraytools或其他人的類似收集操作擴展可能在此方面有用。在編寫自己的類別方法來做這件事情時肯定沒有什麼壞處,但是,就像我所說的那樣,在那裏必須有一個循環。
這是我的建議,無論什麼值得。通過枚舉它拆分數組:
NSMutableArray * keys = [NSMutableArray array];
NSMutableArray * values = [NSMutableArray array];
[array enumerateObjectsUsingBlock:(void (^)(id obj, NSUInteger idx, BOOL *stop)){
if(idx % 2){
[values addObject:obj];
else {
[keys addObject:obj];
}
}];
NSDictionary * d = [NSDictionary dictionaryWithObjects:values forKeys:keys];
好像應該有更好的方式來做到這一點,如與NSIndexSet
和objectsAtIndexes:
,但有創建具有非連續一堆設定的指標沒有方便的方法的指標。
這樣的事情,例如,將是不錯:
@implementation NSIndexSet (WSSNonContiguous)
+ (id) WSS_indexSetWithOddIndexesInRange: (NSRange)range
{
NSMutableIndexSet * s = [NSMutableIndexSet indexSet];
// If the start of the range is even, start with the next number.
NSUInteger start = range.location % 2 ? range.location : range.location + 1;
NSUInteger upper_limit = range.location + range.length;
for(NSUInteger i = start; i < upper_limit; i += 2){
[s addIndex:i];
}
return s;
}
+ (id) WSS_indexSetWithEvenIndexesInRange: (NSRange)range
{
NSMutableIndexSet * s = [NSMutableIndexSet indexSet];
// If the start of the range is odd, start with the next number.
NSUInteger start = range.location % 2 ? range.location + 1 : range.location;
NSUInteger upper_limit = range.location + range.length;
for(NSUInteger i = start; i < upper_limit; i += 2){
[s addIndex:i];
}
return s;
}
@end
在一名助手功能:
NSRange rangeOfNumbers(NSUInteger start, NSUInteger end)
{
return (NSRange){start, end-start};
}
所以,你可以這樣做:
NSIndexSet * s = [NSIndexSet WSS_indexSetWithEvenIndexesInRange:rangeOfNumbers(0, 10)];
NSLog(@"%@", s);
// Prints: <NSMutableIndexSet: 0x7fccca4142a0>[number of indexes: 5 (in 5 ranges), indexes: (0 2 4 6 8)]
可惜你沒有鍵和值倒置,或者你可以使用[NSDictionary dictionaryWithObjectsAndKeys:] –
@FernandoMazzon,如果BeachRunnerFred確實有他的鍵和值倒置,他會如何使用'dictionaryWithObjectsAndKeys'?我自己嘗試過,但'dictionaryWithObjectsAndKeys'請求一個以nil結尾的以逗號分隔的對象列表,而我無法弄清楚如何使用指定的數組。 –
要回答你的問題,我不認爲有任何其他便利方法已經爲此目的而定義。您可能需要繼續使用當前提取鍵/值和字典中的設置的方式。 – iDev