どのように比較して、true/falseが返ってきているのでしょうか。
ある書籍には、『二つの文字列を辞書式順序で比較します。』とあるのですが、
『辞書式順序で比較』という内容がよく理解できていません。
Swift
1var red = "赤" 2var blue = "青" 3 4red < blue // => true 5red > blue // => false
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
Swift のことはカケラも知りませんが、一般的にストリング (一般にイメージされる文字列に限らず、ある特定のバイト数の値の 0 個以上の連なり) の大小比較には、よく辞書式順序での比較が使われます。
たとえば、utf-8 だと "赤"
は 0xeb, 0xb5, 0xa4
というバイト列で、"青"
は 0xe9, 0x9d, 0x92
というバイト列で(表現されているシステムもありま)す (endian による)。これを辞書式順序で比較する、とは、まず 1 バイト目の 0xeb
と 0xe9
で比較して 0xeb > 0xe9
なので "赤" > "青"
となります。
一般に先頭から 1 バイトずつ比較していき、違いが出たところで大小の判定をします。もし、"abc"
と "abcd"
のように同じバイトが続いているうちに一方が末尾にたどり着いた場合はそちらが小になります。
最初に utf-8 なら、と書いたように、encoding によりバイト列としての表現が異なってきますので、一文字が多バイトで表現されるような文字の文字列の辞書式順序はシステムによって違ってきます。
あと、「辞書式」という名前ですが、国語辞典や英和辞典など、普通の書籍の辞書で見出し語を並べる順序と同じということです。
投稿2016/03/04 16:43
総合スコア2468
0
(現行の)コンピュータ処理は本質的に数値計算です。文字の比較なども全て数値としてやっています。
たとえば、アルファベットにはaは1、bは2、cは3、...というように辞書と同じくアルファベット順に数値が割り当ててあります。(ひらがなカタカナなども同様にあいうえお順に割り振ります)
なので
red < blueは一文字目を比較して18 < 2を判断してます。なのでfalse。同様にred > blueは18 > 2なのでtrueという結果を得られます。
bed < blueとすると一文字目は同じなので二文字目以降のed < lueを判断します。
ただし、現実に割り当てる数値はasciiとかunicodeとかの規約で決まってます。
投稿2016/03/05 02:39
総合スコア1680
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
「辞書式順」と言っても、必ずしも辞書と同じ並びではありません。正確には「コード順」ですが、業界では「辞書式順」と言うようです。
swift はどうなっているかは知りませんが、java6クラスString.CompareTo()の仕様では
辞書的の順序の定義を示します。2 つの文字列が異なる場合、両方の文字列に対して有効なインデックスに位置する文字が異なるか、2 つの文字列の長さが異なるか、あるいはその両方が該当します。1 つ以上のインデックスの位置にある文字が異なる場合は、このうちのもっとも小さいインデックスを k とすると、< 演算子を使用して「より小さい」値と判定される、位置 k にある文字を持つ文字列が、もう一方の文字列より辞書的に前になります。この場合、compareTo は 2 つの文字列で位置 k にある 2 つの文字の値の差を返します。 これは次の式で表される値になります。
this.charAt(k)-anotherString.charAt(k)
となっています。これを読んでもよく分かりませんが、「数値」として比較するようです。
(多分、ほとんどの言語はこうだと思います)
つまり、大文字-小文字、ひらがな-カタカナが混在すると、「辞書に並んでいる順」にはなりません。
(例えば Amazon と ANDROID)
本当に辞書と同じ順で比較しようとすると、かなり面倒だと思います。
通常は問題になりませんが、個人名、地名、商品名を並び替える時は本当に「辞書の順」を
要求されるかもしれません。
投稿2016/03/05 03:23
総合スコア711
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/06 05:48