无法对数组进行排序

时间:2012-10-25 13:49:17

标签: iphone objective-c xcode nsarray

我有排序数组的问题。我有两个问题。 1.使用以下代码排序rightArray无法正常工作。 2.i还有一个leftArray,当右数组排序时,其索引应该与右数组相比进行更改。是否可能?。

NSArray *rightArray = [[NSArray alloc] initWithObjects:[mutArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 11)]], nil];
NSArray *sortedArray = [rightArray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSLog(@"%@",sortedArray);

输出:使用上面的代码

排序后
2012-10-25 19:11:44.571 Converter[3511:207] (
    (
    USD,
    EUR,
    GBP,
    JPY,
    CAD,
    AUD,
    INR,
    CHF,
    CNY,
    KWD,
    SGD
)
)

2 个答案:

答案 0 :(得分:3)

NSArray *rightArray = [[NSArray alloc] initWithObjects:[mutArray objectsAtIndexes:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 11)]], nil];
NSArray *sortedArray = [[rightArray lastObject] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSLog(@"%@",sortedArray);

您的字符串位于数组中的数组中。获取rightArray中的唯一对象并对其进行排序。

修改

对于第二个问题,您可以使用中间数据结构

NSMutableDictionary *temp = [[NSMutableDictionary alloc] init];
NSArray *keys = [rightArray lastObject]; 
NSArray *objs = [leftArray lastObject]; // presuming they're also an array in an array

for (int i = 0; i < [keys count]; i++) {
    // we'll use the dictionary to set an one-to-one relationship
    [temp setObject:[objs objectAtIndex:i] forKey:[keys objectAtIndex:i]];
}

NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSArray *sortedObjs = [temp objectsForKeys:sortedKeys notFoundMarker:[NSNull null]];
[temp release]; // if not using ARC

答案 1 :(得分:0)

NSArray *array =  @[@"USD",@"EUR",@"GBP",@"JPY",@"CAD",@"AUD",@"INR",@"CHF",@"CNY",@"KWD",@"SGD"];
NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];
NSLog(@"SortedArray:%@",sortedArray);

它会输出:

SortedArray:(
    AUD,
    CAD,
    CHF,
    CNY,
    EUR,
    GBP,
    INR,
    JPY,
    KWD,
    SGD,
    USD
)

亚历山大回答说,你没有传递一串字符串。