0

私は次のような配列を持っています。これはSqliteDBに由来し、文字列に含まれています。

(

{ 
 id=1;
duedate = "01-Apr-2013";
},

{
 id=2;
duedate = "01-May-2013";
},

{
id=3;
duedate = "01-Jun-2013";
},

{
 id=4;
duedate = "11-Jul-2013";
}

)

配列をソートするための私のコード

NSSortDescriptor *sortDesc = [[NSSortDescriptor alloc] initWithKey:@"duedate" ascending:YES];
[assessment_list sortUsingDescriptors:[NSArray arrayWithObject:sortDesc]];

しかし、これは次のように間違ったソートされた配列を与えます

(

{ 
 id=1;
duedate = "01-Apr-2013";
},

{
id=3;
duedate = "01-Jun-2013";
},

{
id=2;
duedate = "01-May-2013";
},

{
 id=4;
duedate = "11-Jul-2013";
}

)

検索しましたが、この問題は見つかりませんでした

4

4 に答える 4

2

あなたは部分的にそれをする必要があります。

パート1:これらの文字列をに変換しNSDateます。

NSDateFormatter *df=[NSDateFormatter new];
[df setDateFormat:@"dd-MMM-yyyy"];
NSDate *date=[df dateFromString:string];

パート2:次に、並べ替えの手法/方法(セレクター、記述子など)を使用します。

于 2013-03-25T09:26:15.463 に答える
2

これはアルファベット順にソートされているためです。

日付で並べ替えるには、次のようなメソッドを実装する必要があります

NSInteger dateSort(id dict1, id dict2, void* context){
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"mm/dd/yyyy"];
NSDate *date1 = [formatter dateFromString:[dict1 objectForKey:@"duedate"]];
NSDate *date2 = [formatter dateFromString:[dict2 objectForKey:@"duedate"]];
    return [[date1 compare:date2];
}

このような関数を呼び出します

[dateArray sortUsingFunction:dateSort context:NULL];
于 2013-03-25T09:26:28.067 に答える
2

文字列を並べ替えるには、文字列を日付に変換する必要があります

   NSArray *datesStringArray = @[@{@"duedate": @"01-Jun-2013"},@{@"duedate": @"01-Dec-2013"},@{@"duedate": @"01-Apr-2013"},@{@"duedate": @"11-Jul-2013"},];

    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    [dateFormatter setDateFormat:@"dd-MMM-yyyy"];

    NSArray *sortedDateStringArray = [datesStringArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

        NSDictionary *dict1 = (NSDictionary *)obj1;
        NSString *string1 = dict1[@"duedate"];
        NSDictionary *dict2 = (NSDictionary *)obj2;
        NSString *string2 = dict2[@"duedate"];

        NSDate *date1 = [dateFormatter dateFromString:string1];
        NSDate *date2 = [dateFormatter dateFromString:string2];

        return [date1 compare:date2];

    }];
于 2013-03-25T09:41:12.877 に答える
0

日付を時間間隔に変換できます。

int t = [[NSDate date] timeIntervalSince1970];

配列をint値の配列のように並べ替えます

于 2013-03-25T09:27:52.030 に答える