文字列の比較
実感なき文字列の比較
文字列の比較は知らない内に使っています。
例えばMTEntries
タグのsort_by
モディファイアで名前順にソートした時、内部では文字列の比較が行われています。
同じsort_by
モディファイアを持つMTLoop
タグで確認してみましょう。
<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">
<$MTGetVar name="__value__"$>
</MTLoop>
(やらしい感じがしなくもない)実行結果。
0
1
9
A
Z
a
z
あ
ん
ア
ン
式
数字、大文字、小文字、ひらがな、カタカナ、漢字という順になりました。
並べ替えられた結果では文字列の比較がどうも実感できません。
そこで今度は個別の比較をして見ましょう。
個別の比較
比較にはMTIf
タグの比較モディファイアを使います。
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 < あ < ん < ア < ン < 式
この式から実行結果が正しい事がわかります。
そしてこれは、文字列の比較ができた事を意味しています。
空白に注意
文字列の比較では空白に注意して下さい。
下は、記事冒頭の例を、変数の文字数が揃うように空白を挿入したものです。
<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
になりました。
コメント[0]
コメント投稿フォーム
コメントを投稿するにはJavaScirptが必要です。ブラウザのJavaScriptを有効にしてください。
トラックバック[1]
- MTタグで日時を比較する方法とMTDateタグとtsモディファイア - 45式::雑記 (2010年6月15日02:22)
- MTタグで日時を比較するには比較が可能な条件を満たす必要があります。 その条件を満たすのにはMTDateタグとtsモディファイアが便利です。
コメントはまだありません。