返回列表 回復 發帖

文字列の比較 - 45式 雑記

実感なき文字列の比較
文字列の比較は知らない内に使っています。
例えばタグのsort_byモディファイアで名前順にソートした時、内部では文字列の比較が行われています。
同じsort_byモディファイアを持つタグで確認してみましょう。
<MTSetHashVar name="monat"> <$MTSetVar name="01" value="Januar"$> <$MTSetVar name="02" value="Februar"$> <$MTSetVar name="03" value="Maerz"$> <$MTSetVar name="04" value="April"$> <$MTSetVar name="05" value="Mai"$> <$MTSetVar name="06" value="Juni"$> <$MTSetVar name="07" value="Juli"$> <$MTSetVar name="08" value="August"$> <$MTSetVar name="09" value="September"$> <$MTSetVar name="10" value="Oktober"$> <$MTSetVar name="11" value="November"$> <$MTSetVar name="12" value="Dezember"$></MTSetHashVar><MTLoop name="monat" sort_by="value"> <$MTGetVar name="__value__"$></MTLoop>
上記のコードを実行した結果が下になります。
April August Dezember Februar Januar Juli Juni Maerz Mai November Oktober September
AprilからSeptemberまで順に並んで出力されました。
さらに、英字以外も取り混ぜた場合も試してみましょう。
<MTSetHashVar name="chara"> <$MTSetVar name="01" value="1"$> <$MTSetVar name="02" value="a"$> <$MTSetVar name="03" value="A"$> <$MTSetVar name="04" value="あ"$> <$MTSetVar name="05" value="ア"$> <$MTSetVar name="06" value="9"$> <$MTSetVar name="07" value="z"$> <$MTSetVar name="08" value="Z"$> <$MTSetVar name="09" value="ん"$> <$MTSetVar name="10" value="ン"$> <$MTSetVar name="11" value="0"$> <$MTSetVar name="12" value="式"$></MTSetHashVar><MTLoop name="chara" sort_by="value"&gt,Montblanc Meisterstuck Ballpoint Pen; <$MTGetVar name="__value__"$></MTLoop>
(やらしい感じがしなくもない)実行結果。
0 1 9 A Z a z あ ん ア ン 式
数字、大文字、小文字、ひらがな、カタカナ、漢字という順になりました。
並べ替えられた結果では文字列の比較がどうも実感できません。
そこで今度は個別の比較をして見ましょう。
個別の比較
比較にはタグの比較モディファイアを使います。
MTIfタグでは数値の比較だけでなく、文字列の比較もできます。
例として、aとzを比較してみます。
<$MTSetVar name="foo" value="a"$><$MTSetVar name="bar" value="z"$><MTIf name="foo" lt="$bar"> <$MTGetVar name="foo"$> < <$MTGetVar name="bar"$><MTElse name="bar" lt="$foo"> <$MTGetVar name="bar"$> < <$MTGetVar name="foo"$></MTIf>
実行結果です。
a < z
先ほどのごちゃ混ぜの結果を不等式で表すと次のようになります。
0 < 1 < 9 < A < Z < a < z &lt,Montblanc Boheme Paso Doble Red Fountain Pen; あ &lt,Montblanc Boheme Bleu Rollerball Pen; ん < ア < ン < 式
この式から実行結果が正しい事がわかります。
そしてこれは、文字列の比較ができた事を意味しています。
空白に注意
文字列の比較では空白に注意して下さい。
下は、記事冒頭の例を、変数の文字数が揃うように空白を挿入したものです。
<MTSetHashVar name="monat"> <$MTSetVar name="01" value=" Januar"$> <$MTSetVar name="02" value=" Februar"$> <$MTSetVar name="03" value=" Maerz"$> <$MTSetVar name="04" value=" April"$> <$MTSetVar name="05" value=" Mai"$> <$MTSetVar name="06" value=" Juni"$> <$MTSetVar name="07" value=" Juli"$> <$MTSetVar name="08" value=" August"$> <$MTSetVar name="09" value="September"$> <$MTSetVar name="10" value=" Oktober"$> <$MTSetVar name="11" value=" November"$> <$MTSetVar name="12" value=" Dezember"$></MTSetHashVar><MTLoop name="monat" sort_by="value"> <$MTGetVar name="__value__"$></MTLoop>
実行結果は空白を挿入する前と異なったものになります。
Mai Juli Juni April Maerz August Januar Februar Oktober Dezember November September
AprilからSeptemberだった順が、今度はMaiからSeptemberになりました。
返回列表