2012-03-03 4 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]]; 

であると私は、このオブジェクトにどのように多くの国をカウントしたいと思います。通常、[配列数]は です。 しかし、これは配列内のすべてのオブジェクトを数えます。今私の場合、私は配列が3つの英国、5つのアメリカ、7つの日本、3つの中国を含む配列を持っている例を繰り返さないオブジェクトを数えたいと思う、私は欲しい結果国のタイプ= 4です。

私はしたいと思います国のタイプに応じて、Table Viewのいくつかのセクションを作成します。誰でも?

答えて

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

+0

'agileLocation'とは何ですか?それはクラスですか?なぜ 'dataClass'を使わないのですか? – sch

+0

私はもう一度コードを再入力し、警告は消えます。私は今それを試してみましょう。ありがとう – Kin

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

オブジェクトが平等を正しくテストするためのメソッドを実装している場合は、単純です。 –

+0

country引数はNSStringであることに注意してください。 :) – davehayden

+0

ああ私の悪い - それは私がそれを見るためにしなければならなかったスクロールの多くです。たぶんいくつかの新しい行とコロンの整列が私に赤い顔を救っていたでしょう。 –

関連する問題