4

誰でもこのコードの理由を説明できますか:

Dim Data As New SortedList(StringComparer.InvariantCultureIgnoreCase)
Data.Add("AB", 48)
Data.Add("AC", 48)
Data.Add("A-D", 48)
Data.Add("A-", 48)

次の順序でソートされたリストを生成します。

A-  
AB  
AC  
A-D

予想される (論理的で実際に必要な) 順序は次のとおりです。

A-
A-D
AB
AC
4

3 に答える 3

4
Dim Data As New SortedList(StringComparer.InvariantCultureIgnoreCase)

問題は、指定された並べ替えルールにあると思います。

InvariantCultureIgnoreCase問題を変更OrdinalまたはOrdinalIgnoreCase解決する

Dim Data As New SortedList(StringComparer.OrdinalIgnoreCase)

デモはこちら

于 2013-10-14T23:47:02.100 に答える
3

これがデフォルトの文字列比較子の実装方法です。これをカスタマイズするには、独自のカスタムを実装するIComparerか、互換性を高めるためにオーバーライドComparer<T>クラスを実装し、それをSortedListコンストラクターまたは passに渡す必要がありStringComparer.OrdinalIgnoreCaseます。

于 2013-10-14T23:36:46.860 に答える
1

あなたは、文化的に無関心な方法で行動するよう比較者に求めています. これは、さまざまな文化の消費者が並べ替えを理解できるように、ローカリゼーション チームが最も適切な方法であると感じている方法を使用します。

これは非序数であるため、すべての文字が自動的に考慮され、ランク付けされるわけではありません。

アルファベット順の並べ替えのために、ハイフンは無視される (概念的には単語を連結する) と思います。

「Ricky-Bobby」を「RickyBobby」の前に置くことを提案するかもしれませんが、ローカリゼーション チームは明らかに同意しませんでした。すべての文化の消費者は、おそらくこれら 2 つのエントリの並べ替えの無関心を理解するでしょう...さらに、両方が「Ricky-Charlie」の前に来る理由を理解するでしょう。

于 2013-10-15T00:18:43.037 に答える