2012-09-10 80 views
0

雖然通過解析xml文檔,我已經使用了多個if-else來明智地解析數據標籤。我也可以用for循環來做同樣的事情。但是我對使用哪一個感到困惑,所以性能會提高。哪一個會更快?多個if-else對循環

//Parsing with If-Else 

if(element.name isEqualToString:@"String1") { 
object.id = [element.value intValue]; 
} 
if(element.name isEqualToString:@"String2") { 
object.name = element.value; 
} 
if(element.name isEqualToString:@"String3") { 
object.address = element.value; 
} 
..... 

// OR Parsing with for loop 

for(NSString * str in NSArray) { 
[dict setObject:element.value forKey:element.name];// This will add parsing element in dict 
} 

//Use the dictionary to show data later 
+2

不知道哪一個是性能更快,但如果其他你應該使用'如果其他if'更高的性能報表的情況下,因爲一旦它有答案,它就會跳過其他的陳述。即 - 如果(測試){做東西}否則如果(其他東西){做其他東西} – Jamie

回答

0

這實際上是關於表示的一個問題,因爲它關於代碼結構。具有命名屬性的對象強烈建議使用if-elseif結構,並且字典強烈建議使用循環。

XML(以及它所有的親屬)與名稱 - 值表示完全配對。標籤是名稱,標籤體是價值。

字典是要走的路,因此循環也是如此。這是NS解析器以及我能想到的任何第三方所做的選擇。

1

字典查找可以更快,因爲它使用密鑰哈希值。也就是說,在嘗試優化代碼之前,您應該始終對代碼進行剖析。

就我個人而言,我喜歡字典方法,因爲它不是世俗的代碼。此外,你可以輕鬆的元素名稱映射到感興趣的字典鍵:

NSDictionary *keySubstitutions = { @"String1" : @"id", @"String2" : @"name", ... }; 

for(NSXMLElement * element in elements) { 
    id key = keySubstitutions[element.name]; 
    if (key) 
     dict[key] = element.value; 
    // else the element name is not supported 
}