1

これは、NSArrayController への IB バインディングを持つ NSTableView であり、すべての値が正しく表示されます。
ただし、数値は最初の char 値でのみソートされます。たとえば、115.31 は 2.5 未満、23.9 は 4.71 未満などになります。

保持されている NSMutableArray から文字列を取得し、すべての文字列を NSNumber/NSDecimalNumber に変換しようとしましたが、まだうまくいきません:

NSMutableArray *array1 = [[string1 componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]] mutableCopy];

NSMutableArray *array1alt = [NSMutableArray array];

for(NSString *strNum in array1)
{
    NSNumber *number = strNum;
    [array1alt addObject:number];
}

助けてください、ありがとう。

編集:これは、私の NSTableColumn(s) の NSMutableArray(s) が満たされる方法です:

NSMutableArray *rows = [NSMutableArray array];

for (NSUInteger i = 0; i < array1alt.count && i < array2.count && i < array3.count && i < array4.count; i++)
{
    NSMutableDictionary *row = [NSMutableDictionary dictionary];
    [row setObject:[array1alt objectAtIndex:i] forKey:@"Apples"];
    [row setObject:[array2 objectAtIndex:i] forKey:@"Oranges"];
    [row setObject:[array3 objectAtIndex:i] forKey:@"Peaches"];
    [row setObject:[array4 objectAtIndex:i] forKey:@"Plums"];
    [rows addObject:row];
}

[myArrayController2 setContent:rows2];
[aTableView reloadData];
4

2 に答える 2

1

次の場所でコンパイラの警告が表示されないことに驚いています。

NSNumber *number = strNum;

あなたはおそらく欲しい:

NSNumber *number = [NSNumber numberWithDouble:[strNum doubleValue]];

または、より簡単に:

NSNumber *number = @([strNum doubleValue]);

出力で数値変換を処理したくない場合は、元の文字列の配列を次のように並べ替えることができます。

NSArray *array2 = [array1 sortedArrayUsingComparator:^NSComparisonResult(NSString *obj1, NSString *obj2) {
    double num1 = [obj1 doubleValue];
    double num2 = [obj2 doubleValue];
    if (num1 < num2)
        return NSOrderedAscending;
    else if (num1 > num2)
        return NSOrderedDescending;
    else
        return NSOrderedSame;
}];

10 進数を使用する場合は、おそらく次のようにすることができます。

NSMutableArray *array2 = [NSMutableArray array];
for (NSString *strNum in array1)
{
    [array2 addObject:[NSDecimalNumber decimalNumberWithString:strNum]];
}

[array2 sortUsingComparator:^NSComparisonResult(NSDecimalNumber *obj1, NSDecimalNumber *obj2) {
    return [obj1 compare:obj2];
}];
于 2013-06-03T18:23:19.153 に答える