0

配列を並べ替えたい....私の配列要素は、この順序であるdateArray{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14, 15,16,17,18,19}

しかし、この配列を逆順にしたいのですが、このコードを逆に使用しました..

dateArray=[[NSMutableArray alloc]initWithArray:[[date reverseObjectEnumerator] allObjects]];

しかし、それはこの出力を与えます

dateArray=(
9,
8,
7,
6,
5,
4,
3,
2,
19,
18,
17,
16,
15,
14,
13,
12,
11,
10,
1,
0
)

しかし、この出力dateArray(19,18,17,16,15,14,13,12,11,10........2,1,0)が必要です。ソート方法も使用しましたが、出力は同じです。これどうやってするの???助けてください

編集:

私の配列要素は NSDocument Directory の内容です....

解決済み この質問は解決済みです。配列を好きなように並べ替える正確な方法はわかりませんが、サブパス名を変更しました。そして、それは正しい出力を提供します..

前もって感謝します

4

5 に答える 5

2

あなたの配列には、質問のように数値ではなくオブジェクトが含まれていると想定しています。配列を昇順または降順でソートする例を次に示します。

NSArray *array = [[NSArray alloc]  initWithObjects:@"5",@"1",@"0",@"3",@"2",@"4", nil];

//or

NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:5], [NSNumber numberWithInt:1], [NSNumber numberWithInt:0], [NSNumber numberWithInt:3], [NSNumber numberWithInt:2], [NSNumber numberWithInt:4], nil];


NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:nil ascending:NO]; //YES, for ascending
NSLog(@"Sorted array %@",[array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sort, nil]]);
于 2012-08-31T09:55:38.563 に答える
1

数字の代わりに文字列を使用する場合は、正しい並べ替えのために次の形式を使用する必要があります。

20、、19... 10、、、、... 09、、_ _08020100

0したがって、すべての番号に先頭を追加する必要があります。文字列の場合は、数値ではなく文字列のように並べ替えることができます。これが、先行ゼロが必要な理由です。


ちなみに、最も簡単な解決策は、文字列が来るサブパスの名前を変更することです。正しい順序を取得するために、アプリケーションで他に何も変更する必要はありません。

于 2012-08-31T11:04:52.350 に答える
1

3つの方法(他の多くの方法のうち、私は確信しています)。最も簡単な方法 ( this SO question のおかげで) は、reverseObjectEnumerator を使用することです。

NSArray *dateArrayReversed = [[dateArray reverseObjectEnumerator] allObjects];

または、並べ替え記述子 (乱雑) を使用できます。

NSArray *arrayOne = [NSArray arrayWithObjects:@1,@2,@3,@4,@5,@6,@7,@8,@9,@10,@11,@12,@13,@14,@15,@16,@17,@18,@19, nil];

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];
    NSArray *arrayTwo =  [arrayOne sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];

もう 1 つの方法は、逆配列のカテゴリを作成することです。その良い例については、この SO の質問を参照してください。

Objective-C で NSArray を反転するにはどうすればよいですか?

于 2012-08-31T10:01:07.797 に答える
1

これは簡単に実行できます。NSSortDescriptor を使用して配列を並べ替えることができますが、ここで紹介するちょっとしたトリックがあります。コードは次のとおりです。

NSMutableArray *yourArray=[[NSMutableArray alloc] initWithObjects:@"1",@"5",@"10",@"6",@"3",@"11", nil];

NSMutableArray *array=[[NSMutableArray alloc] init];
int count=[yourArray count];
for (int i=0; i<count; i++) {
    [array addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:[[yourArray objectAtIndex:i]intValue]],@"val", nil]];
}

if([array count] > 0){
    NSSortDescriptor * descriptor = [[[NSSortDescriptor alloc] initWithKey:@"val"
                                                                 ascending:NO] autorelease];
    NSArray * sortedArray = [array sortedArrayUsingDescriptors:
                             [NSArray arrayWithObject:descriptor]];
    [array removeAllObjects];
    [array addObjectsFromArray:sortedArray];
}
[yourArray removeAllObjects];
[yourArray release];
NSLog(@"sorted array=%@",array);

これで私がやっていることは、最初に変更可能な辞書に NSNumber 形式で文字列オブジェクトを追加し、次にこの辞書を別の配列に追加することです。次に、NSSortDescriptor を使用して配列を昇順または降順で並べ替えます。

于 2012-09-01T11:48:52.473 に答える
1

使用する必要があります

-[NSArray sortedArrayUsingSelector:]

また

-[NSMutableArray sortUsingSelector:]@selector(compare:) をパラメーターとして渡します。

于 2012-08-31T09:55:06.007 に答える