2012-03-03 94 views
0

我想問一下如何計算數組中的對象類型。例如[Xcode]如何計數NSArray根據類型

這是我的數據類

+ (id)LocationWithID:(NSString *)UniqueID name:(NSString *)name address:(NSString *)address latitude:(float)latitude longitude:(float)longitude locationtype:(NSString *)locationtype country:(NSString *)country distance:(float)distance; 

,這是我的數組

[array addObject:[dataclass LocationWithID:UniqueID name:name address:address latitude:latitude longitude:longitude locationtype:locationtype country:country distance:distance]]; 

,我想在這種對象計算有多少國家。通常我們使用 [array count]; 但這會計算數組中的所有對象。現在在我的情況下,我想計算非重複的對象,例如我得到一個數組包含3個英國,5個美國,7個日本,3箇中國和我想要的結果是國家類型= 4。

我想根據國家類型爲表視圖創建多個部分。任何人?

回答

1

您可以使用字典把對象與同一個國家在一個單獨的數組:

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]; 
for (dataclass *location in array) { 
    if (![dictionary objectForKey:location.country]) { 
     [dictionary setObject:[NSMutableArray array] forKey:location.country]; 
    } 
    [(NSMutableArray *)[dictionary objectForKey:location.country] addObject:location]; 
} 

現在,不僅可以得到不同的國家的數量是這樣的:

int countriesCount = [dictionary count]; 

而且,使用相應國家的位置填充表格視圖的每個部分都很容易。

您可以檢索其名稱countryName特定的國家,這樣所有位置:

NSArray *locationsForCountry = [dictionary objectForKey:countryName]; 

你也可以擁有所有的國家,像這樣的列表:

NSArray *countries = [[dictionary keyEnumerator] allObjects]; 
+0

當我插入字典碼警告我接收到該警告。 dropbox.com/u/2305062/Screen%20Shot%202012-03-04%20at%2000.07.02.png)。 – Kin 2012-03-04 00:09:39

+0

什麼是'agileLocation'?這是一堂課嗎?你爲什麼不使用'dataClass'? – sch 2012-03-04 00:14:14

+0

我重新輸入了代碼,警告消失。我現在就試試看。謝謝 – Kin 2012-03-04 00:15:58

1

枚舉數組中的每個項目併爲每個項目獲取國家並將其添加到NSMutableSet。枚舉後,集合的大小是唯一國家的數量。

如果你正在創建一個表格,並且你只是希望表格爲每個國家設置一個部分,那麼可能有更好的方法來做到這一點,但我不知道。我猜想它會像綁定表中適當的屬性來創建節到數組控制器或數組控制器的元素中的正確值。

0

NSArray本身並沒有這個功能,所以,正如其他人所指出的那樣,爲每個國家保留單獨的統計數據將是最容易的。做到這一點的最好方法是創建一個NSCountedSet對象,並在你將數據對象添加到數組時添加這些國家。

https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html

得到計數對於任何一個國家,你只需要調用[集countForObject:國家]。簡單!語義問題::收集表達型「數據類*」可能不響應「countByEnumeratingWithState:對象:計數:」 [屏幕快照](HTTP:// DL

+0

只有您的對象實現了正確測試相等性的方法纔是簡單的。 – 2012-03-04 00:31:20

+0

請注意,country參數是一個NSString。 :) – davehayden 2012-03-04 00:55:49

+0

啊,我的壞 - 這是很多滾動我不得不做的看到這一點。也許一些新的線條和冒號排列會爲我節省紅臉。 – 2012-03-04 00:57:57