web-dev-qa-db-ja.com

NSArrayの最後のオブジェクトを取得する方法

そのため、アイテムの量を変えることができる配列があります。とにかくNSArrayの最後のオブジェクトを取得できるかどうか疑問に思っていました。 intカウンターを使用して配列内のアイテムの量を追跡することを考えましたが、これは面倒です。

とにかく、これよりも優れている人はいますか?

42

質問を少し広げると、配列の最後のオブジェクトを取得するさまざまな方法で必要になる場合がいくつかあります。

まっすぐなCocoaプログラム

標準のCocoaプログラムの中でオブジェクトを取得したいだけの場合は、次のようにします。

[myArray lastObject]

カウンターの懸念に対処するために、自分自身を実装する必要もありません:

NSUInteger myCount = [myArray count];

キー値コーディング(KVC)を使用する

KVCを介して配列の最後のオブジェクトにアクセスする必要がある場合、ストーリーには少し説明が必要です。

最初に、配列から通常のキーの値を要求します配列内のオブジェクトごとにそのキーの値で構成される新しい配列を作成します。つまり、配列からキーlastObjectを要求すると、配列は、キーlastObjectを使用して各オブジェクトにvalueForKey:を送信します。意図した結果ではないこととは別に、例外もスローする可能性があります。

そのため、(内容ではなく)配列自体に本当にキーを送信する必要がある場合、キーの前に@- signを追加する必要があります。これは、キーがその内容ではなく配列自体を対象としていることを配列に伝えます。

そのため、キーは@lastObjectという形式で、次のように使用する必要があります。

NSArray *arr = @[@1, @2, @3];

NSNumber *number = [arr valueForKey: @"@lastObject"];

ソート記述子内

実際のプログラムでこのキーを使用する方法の例は、配列の配列を各内部配列のlastオブジェクトでソートする必要がある状況です。

上記のキーは、ソート記述子で単純に使用されます。

NSArray *arrayOfArrays = @[@[@5, @7, @8], @[@2, @3, @4, @6], @[@2, @5]];

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey: @"@lastObject" ascending: YES];

NSArray *sorted = [arrayOfArrays sortedArrayUsingDescriptors: @[sd]];

述語で

同様に、配列の配列をフィルタリングするために、キーを述部で直接使用できます。

NSPredicate *pred = [NSPredicate predicateWithFormat: @"self.@lastObject > 5"];

NSArray *filtered = [arrayOfArrays filteredArrayUsingPredicate: pred];

self- partを省略したい人は、単に@"@lastObject > 5"という形式を使用できます

99
Monolo
[yourArray lastObject];

ドキュメント を参照してください

18
Krishnabhadra

たぶんこのように:

id object = [myArray lastObject];

良いヒントは、ドキュメントを読みたいシンボルをオプションクリックすることです。たとえば、オプションキーを押しながら、XcodeエディターでNSArrayと書かれているテキストをクリックします。

基本を備えた素敵なポップアップと、詳細なドキュメントへのリンクが表示されます。

10
PeyloW

またはあなたが空想を得たい場合:

yourArray.lastObject 
2
bbrame