Ключи NSDictionary, отсортированные по значению численно

sed 's/a.*b/xyz/g;' old_file > new_file

GNU sed (который Вы, вероятно, имеете) еще более универсален:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file

Вот краткое объяснение тех опций:

-i [СУФФИКС], - оперативные файлы редактирования [=SUFFIX] на месте (делает резервное копирование, если расширение предоставило)

-r, - regexp-расширенный расширенные регулярные выражения использования в сценарии.

версия FreeBSD также поддерживает эти опции. NetBSD и поддержка версий OpenBSD [только 112].

, Если Вы хотите узнать больше о sed, , Cori предложил это учебное руководство .

18
задан Josh Caswell 15 May 2013 в 18:56
поделиться

4 ответа

Не уверен, что это поможет, но вы также можете сохранить массив NSArray в plist; в отличие от NSDictionary (который возвращает ключи в случайном порядке), вы получаете их обратно, когда вставляете их.

0
ответ дан 30 November 2019 в 09:11
поделиться

-сравнение: сравнение строк. Передайте другой метод сравнения, например:

@implementation NSString (numericComparison)

- (NSComparisonResult) compareNumerically:(NSString *) other
{
float myValue = [self floatValue];
float otherValue = [other floatValue];
if (myValue == otherValue) return NSOrderedSame;
return (myValue < otherValue ? NSOrderedAscending : NSOrderedDescending);
}

@end

В вашем конкретном случае вы можете вместо этого использовать -intValue.

2
ответ дан 30 November 2019 в 09:11
поделиться

как насчет использования ключейSortedByValueUsingSelector (NSD словарь)

Похоже на то, что Вам нужно, согласно документации в XCode

.
7
ответ дан 30 November 2019 в 09:11
поделиться
@implementation NSString (numericComparison)

- (NSComparisonResult) floatCompare:(NSString *) other
{
    float myValue = [self floatValue];
    float otherValue = [other floatValue];
    if (myValue == otherValue) return NSOrderedSame;
    return (myValue < otherValue ? NSOrderedAscending : NSOrderedDescending);
}

- (NSComparisonResult) intCompare:(NSString *) other
{
    int myValue = [self intValue];
    int otherValue = [other intValue];
    if (myValue == otherValue) return NSOrderedSame;
    return (myValue < otherValue ? NSOrderedAscending : NSOrderedDescending);
}

@end

NSString *defaultNames[] = {@"Matt", @"Terry",@"Jessica",@"Sean",nil};
// NSNumber *defaultScores[] = {@"600", @"500",@"100",@"50", nil};

NSNumber *defaultScores[] = {                                                                   
            [NSNumber  numberWithInt:600],
            [NSNumber  numberWithInt:500],
            [NSNumber  numberWithInt:100],
            [NSNumber  numberWithInt:50],
            nil 
    };

NSDictionary *newScoreDict =  [NSDictionary dictionaryWithObjects:(id *)defaultScores forKeys:(id *)defaultNames count:4];

NSArray *currScores = [newScoreDict keysSortedByValueUsingSelector:@selector(intCompare:NotSureWhatGoesHere:)];

Меня все еще не путает с предыдущей строкой?

Я просто использую

//
NSArray *currScores = [newScoreDict keysSortedByValueUsingSelector:@selector(intCompare:other:)];
//

В порядке ли массив чисел или есть более простой способ ?

Большое спасибо ...

3
ответ дан 30 November 2019 в 09:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: