2016-08-12 65 views
2

有沒有辦法從一個NSMutableDictionary中一次檢索和移除一個對象?將摺疊方法如下:在一次去檢索並從一個NSMutableDictionary中移除一個對象

id myObject = [myMutableDict objectForKey:@"myKey"] 

if(myObject) 
{ 
    [myMutableDict removeObjectForKey:@"myKey"]; 

    ...my code... 
} 

中:

id myObject = [myMutableDict retrieveAndRemoveObjectForKey:@"myKey"]; 

if (myObject) 
{ 
    ...my code... 
} 

我沒有任何瓶頸或任何運行,我沒有什麼異形,但它很有道理的有一種從可變字典中移除對象並一次返回的方法,這樣字典不會最終找到兩次「myObject」(我知道我不應該對NSMutableDictionary如何在內部工作做任何假設)。

+0

「有意義」?不,它不。在任何其他語言運行庫中的任何集合類中都沒有看到這樣的方法。但是,如果你想自己寫一個,那麼創建一個類別就是繼續。 – Droppy

+0

「我還沒有在任何其他語言運行時在任何集合類中看到這樣的方法。」這不是一個有意義的理由。在其他語言中,您可以找到一個元素,獲取一個迭代器,然後在不變的時間內用迭代器移除該對象。在這裏,NSMutableDictionary可能需要在內部找到兩次「myObject」,每次方法調用一次,所以兩種方法都會很有意義。無論如何,如果沒有內置任何東西,那麼我想答案是否定的。 – Rajveer

+0

至少在Python中有這樣的方法:https://docs.python.org/3/library/stdtypes.html#dict.pop –

回答

0

您可以將類別添加到NSMutableDictionary並添加功能:

-(id) retrieveAndRemoveObjectForKey:(NSString*)key { 
    id myObject = [self objectForKey:@"myKey"]; 

    if(myObject) 
    { 
     [self removeObjectForKey:@"myKey"]; 
    } 

    return myObject; 
} 

,如果你有一個壞的訪問意味着你需要保留myObject

+0

這不是一個類,因爲它引用了一個名爲'myMutableDict'的變量。 – Droppy

+0

謝謝,我編輯了答案:) –

+0

好,很酷。現在這個'保留'這個行業...... – Droppy

0

至於建議,寫一個類上NSMutablArray:

的NSMutableArray + Pop.h

@interface NSMutableArray (pop) 

-(id) popObjectForKey:(NSString*)key; 

@end 

NSMutableArray + Pop.m

@implementation NSMutableArray (pop) 

-(id) popObjectForKey:(NSString*)key { 
    id result = self[key]; 
    self[key] = nil; 
    return result; 
} 

@end 
相關問題