私はNSSortDescriptor
を使用してNSArray
をNSDictionary
に分類しています。私のソートキーの空白の値を持つ辞書項目が、ソートされたリストの最後に表示されることを希望している点を除いて、素晴らしいものです。簡単にこれを達成する方法はありますか?または、カスタム並べ替え関数を作成する必要がありますか?そして、いいえ、私はそれをDESCの順序に設定したくないです...私はソートされた結果をA、A、B、B、C、空白、空白のようにしたいと思います。NSSortDescriptorを使用してソートの最後に空の文字列を簡単に挿入できますか?
答えて
カスタム比較を使用して別の例を見た後にこれを見てください。 ...両方の文字列が空であれば比較演算はNSOrderedSameを返し
@interface NSString (CustomStatusCompare)
- (NSComparisonResult)customStatusCompare:(NSString*)other;
@end
@implementation NSString (CustomStatusCompare)
- (NSComparisonResult)customStatusCompare:(NSString*)other {
NSAssert([other isKindOfClass:[NSString class]], @"Must be a NSString");
if ([self isEqual:other]) {
return NSOrderedSame;
}
else if ([self length] > 0 && [other length] > 0) {
return [self localizedCaseInsensitiveCompare:other];
}
else if ([self length] > 0 && [other length] == 0) {
return NSOrderedAscending;
}
else {
return NSOrderedDescending;
}
}
@end
NSSortDescriptor *serviceTypeDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"Service"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor *locationDescriptor =
[[NSSortDescriptor alloc] initWithKey:@"Location"
ascending:YES
selector:@selector(customStatusCompare:)]; //using custom comparison here!
NSArray *descriptors = [NSArray arrayWithObjects:locationDescriptor, nameDescriptor, nil];
self.navArray = [self.navArray sortedArrayUsingDescriptors:descriptors];
両方の文字列が空である場合にのみ、1つの文字列が空の場合...正規の比較関数を呼び出します。ここで私がなってしまったコードがありますその比較の通常の順序を逆にします。 Voila!
うわー、ごめんなさい、私は何とかあなたの質問を間違って読んで、最初に先頭の空白文字を含む文字列を望んでいたと思った:/私は読書の仕事に行きます... –
NSDiacriticInsensitiveまたはNSCaseInsensitiveの代わりにNSNumericSortを使用して並べ替えを行います。空白はおそらくasciiコードで256なので、リストの後ろに送られます。
編集:私は疑問を誤解し、先頭のスペースを先頭にソート順の文字列を挿入することを意図していました。
あなたはこのようなものがほしいと思います。これは完全にテストされておらず、複数の先頭スペースを考慮していません。よりエレガントな方法があると確信していますが、それは仕事を完了させるべきです。
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
NSString *str1 = (NSString *)obj1;
NSString *str2 = (NSString *)obj2;
BOOL str1HasSpace = [str1 hasPrefix:@" "];
BOOL str2HasSpace = [str2 hasPrefix:@" "];
if (str1HasSpace && !str2HasSpace) {
return NSOrderedAscending;
} else if (str2HasSpace && ! str1HasSpace) {
return NSOrderedDescending;
} else {
return [[str1 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]] compare:[str2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]];
}
}];
ありがとう、私はあなたがここに行くのを見ます。私がやったことは非常に似ていました...ブロックの代わりにこのカスタム比較を独自のメソッドのNSStringカテゴリに入れました(それは正しい名前ですか?)。 – Bryan
はい、カテゴリは正しい名前です。 –
- 1. リンクリストに文字列を挿入してソートする
- 2. Codeigniter:set_value()が空の場合に文字列を挿入します。
- 3. タイマーを使用して文字列グリッド内の文字列の挿入ソートをアニメーション化する方法は?
- 4. NOT NULLフィールドに空の文字列を挿入できますか?
- 5. PHPは文字列の前後にテキストを挿入します
- 6. 文字列の途中に可変数の空白を挿入します( "使用法"ヘルプのフォーマットに使用)
- 7. 配列の値の最後の2文字で配列をソートしますか?
- 8. 最後の文字列がコアデータに挿入されない
- 9. LINQ to SQL DataContextを使用して2つの接続文字列を簡単に変更できますか?
- 10. groovyを使用してn番目の文字の後に文字を挿入します
- 11. MySQLのテキスト列に文字列を挿入できません
- 12. Windows用のodataクライアントライブラリを使用してUnicode文字列を挿入します。
- 13. C文字列:文字列の最後の単語を取得
- 14. jQueryは文字列の最後の空白文字の入力フィールドを検証しますか?
- 15. ページ上の画像の後に文字列を挿入する
- 16. 再帰を使用して文字を文字列に挿入しますか? (MIPS)
- 17. 英数字グループの後に数字を挿入していない数字グループを後で挿入します。
- 18. sqlalchemy簡単に挿入または更新できますか?
- 19. 文字をSQL文字列に挿入します。
- 20. MySQL:ストアドファンクションを使用して文字列の単語をソートする方法は?
- 21. 文章/文字列の最後の単語を抽出しますか?
- 22. ノードを使用してHTMLファイルに文字列を挿入するのに最適な方法
- 23. 文字列オフ最後の3つの文字をトリミングする簡単な方法があります
- 24. ワイルドカードまたは正規表現を使用して文字列の最後に空白を見つけよう
- 25. 以下の方法で文字列のリストをソートする最も簡単な方法は何ですか?
- 26. Pythonを使用して文字列内に一定量の文字の後にスペースを挿入するにはどうすればよいですか?
- 27. プロパティのデフォルト値としてnullまたは空の文字列を挿入
- 28. 空の文字列で上書きするためにC#のチェック挿入値が空またはnullです。
- 29. 表示最後に空白を確認したときの文字列
- 30. VB.NETを使用したAccessで空の文字列フィールドをnullに挿入する
空白の値はどういう意味ですか?値なし、空文字列、空白または 'NSNull'? – Costique
私は空の文字列を意味しました。 NSDictionaryをplistからロードします。値は、 です。 –
Bryan