按升序对数组进行排序,而不会丢失索引Objective-C

时间:2010-03-21 22:39:56

标签: iphone objective-c arrays sorting

我有一个数组,例如

    Array {
    3.0 at Index 0
    2.0 at Index 1
    3.5 at Index 2
    1.0 at Index 4
}

我想按升序排序,而不会丢失索引,就像这样,

    Array {
    1.0 at Index 4
    2.0 at Index 1
    3.0 at Index 0
    3.5 at Index 2
}

当我使用它对数组进行排序时,

NSArray *sortedArray = [hArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
[knnRecog sortUsingDescriptors:[NSArray arrayWithObject:sortAsc]];

我输了索引。有人知道排序数组后保留索引的方法吗?感谢

2 个答案:

答案 0 :(得分:2)

您可以通过更改基础数据结构来进行所需的排序。考虑使用数组数组,例如:

{
    {3.0, Index 0},
    {2.0, Index 1},
    {3.5, Index 2},
    {1.0, Index 4}
}

并给出了排序功能:

NSComparisonResult customCompareFunction(NSArray* first, NSArray* second, void* context)
{
    id firstValue = [first objectAtIndex:0];
    id secondValue = [second objectAtIndex:0];
    return [firstValue compare:secondValue];
}

你可以这样排序:

NSArray* myArray = [NSArray arrayWithObjects:
                    [NSArray arrayWithObjects:
                     [NSNumber numberWithFloat:3.0f],
                     [NSNumber numberWithInt:0], nil],
                    [NSArray arrayWithObjects:
                     [NSNumber numberWithFloat:2.0f],
                     [NSNumber numberWithInt:1], nil],
                    [NSArray arrayWithObjects:
                     [NSNumber numberWithFloat:3.5f],
                     [NSNumber numberWithInt:2], nil],
                    [NSArray arrayWithObjects:
                     [NSNumber numberWithFloat:1.0f],
                     [NSNumber numberWithInt:4], nil]];

NSArray* sortedArray = [myArray sortedArrayUsingFunction:customCompareFunction context:NULL];

NSLog(@"Sorted array: %@", sortedArray);

打印哪些:

排序数组:(         (         1,         4     )         (         2,         1     )         (         3,         0     )         (         3.5,         2     ) )

答案 1 :(得分:1)

根据定义,您无法对数组进行排序并保留初始索引,因为排序只是交换索引以生成新的排序顺序。排序总是改变索引。

听起来你真正想做的是将初始数组的索引转换为数据,然后将其与初始数组的数据一起存储。

如果是这样,那么你需要一组字典。字典应该将原始字典的单个索引与该索引处的值相关联:

NSDictionary *anElement=[NSDictionary dictionaryWithObject:[intialArray objectAtIndex:i] forKey:[NSNumber numberWithInt:i]];

然后将每个字典添加到数组以存储它们。然后,您可以根据需要对该数组进行排序(使用字典的谓词),而不会丢失原始数组中的关系。