(このドキュメントは未整理です)
StringSortは、ハイフン・アポストロフィが英数字や他の記号よりも前になるように比較するように指定します。 これらの値や他の値と組み合わせて使用することも出来ます。 CompareOptions.StringSortの解説では、
文字列の比較時に、文字列での並べ替えアルゴリズムを使用することを示します。文字列での並べ替えでは、ハイフン、アポストロフィ、およびその他の英数字以外の記号が英数字よりも前に来ます。
CompareOptions 列挙体
とされているものの、具体的にハイフン・アポストロフィ以外のどの記号が無視される対象なのかは明記されていないようです。 また、.NET FrameworkとMonoでも実行結果は異なるようです。
CompareOptions.StringSortを指定してハイフン・アポストロフィが英数字よりも前となるように比較する
using System;
using System.Globalization;
using System.Threading;
class Sample {
static void Main()
{
Console.WriteLine(Thread.CurrentThread.CurrentCulture);
Compare("cant", "can't", CompareOptions.None);
Compare("cant", "can't", CompareOptions.StringSort);
Compare("cant", "can't", CompareOptions.Ordinal);
Console.WriteLine();
Compare("coop", "co-op", CompareOptions.None);
Compare("coop", "co-op", CompareOptions.StringSort);
Compare("coop", "co-op", CompareOptions.Ordinal);
Console.WriteLine();
Compare("あい", "あ-い", CompareOptions.None);
Compare("あい", "あ-い", CompareOptions.StringSort);
Compare("あい", "あ-い", CompareOptions.Ordinal);
Console.WriteLine();
Compare("coop", "co#op", CompareOptions.None);
Compare("coop", "co#op", CompareOptions.StringSort);
Compare("coop", "co@op", CompareOptions.None);
Compare("coop", "co@op", CompareOptions.StringSort);
Compare("co-op", "co#op", CompareOptions.None);
Compare("co-op", "co#op", CompareOptions.StringSort);
Compare("co-op", "co@op", CompareOptions.None);
Compare("co-op", "co@op", CompareOptions.StringSort);
}
private static void Compare(string s1, string s2, CompareOptions options)
{
Console.WriteLine("{0} {1} : {2,2} ({3:f})", s1, s2, String.Compare(s1, s2, Thread.CurrentThread.CurrentCulture, options), options);
}
}
実行結果
ja-JP cant can't : -1 (None) cant can't : 1 (StringSort) cant can't : 77 (Ordinal) coop co-op : -1 (None) coop co-op : 1 (StringSort) coop co-op : 66 (Ordinal) あい あ-い : 1 (None) あい あ-い : 1 (StringSort) あい あ-い : -52937 (Ordinal) coop co#op : 1 (None) coop co#op : 1 (StringSort) coop co@op : 1 (None) coop co@op : 1 (StringSort) co-op co#op : 1 (None) co-op co#op : -1 (StringSort) co-op co@op : 1 (None) co-op co@op : -1 (StringSort)
実行結果
ja-JP cant can't : -1 (None) cant can't : 0 (StringSort) cant can't : 77 (Ordinal) coop co-op : -1 (None) coop co-op : 0 (StringSort) coop co-op : 66 (Ordinal) あい あ-い : -1 (None) あい あ-い : 0 (StringSort) あい あ-い : -52937 (Ordinal) coop co#op : 1 (None) coop co#op : 1 (StringSort) coop co@op : 1 (None) coop co@op : 1 (StringSort) co-op co#op : 1 (None) co-op co#op : 1 (StringSort) co-op co@op : 1 (None) co-op co@op : 1 (StringSort)