2009/12/01(Tue) 23:01:19 編集(投稿者)
> 規則は、A階層が浅い方が先に来て、Babcd順で、@index.htmlだけ例外的に先に来るようにしたいのです。
> 例)a\a\a より a\aの方が先。
よーするに、ふたつの string を特殊なルールで比較したいと。
Splitで'\'区切りでぶった切って比較するだけちゃいますかしら。
↓ index.html うんぬんはめんどっちーからパス
using System;
using System.Collections.Generic;
class DirComp : IComparer<string> {
public int Compare(string x, string y) {
char[] delim = { '\\' };
string[] xa = x.Split(delim);
string[] ya = y.Split(delim);
int result = xa.Length - ya.Length;
if ( result != 0 ) return result;
for ( int i = 0; i < xa.Length; ++i ) {
result = string.Compare(xa[i],ya[i]);
if ( result != 0 ) break;
}
return result;
}
}
// おためし
class Program {
public static void Main() {
string[] data = {
@"a\a\a", @"a\a\b", @"a\a\c",
@"a\b\a", @"a\b\b", @"a\b\c",
@"a\c\a", @"a\c\b", @"a\c\c",
@"b\a\a", @"b\a\b", @"b\a\c",
@"b\b\a", @"b\b\b", @"b\b\c",
@"b\c\a", @"b\c\b", @"b\c\c",
@"a\a", @"a\b", @"a\c",
@"b\a", @"b\b", @"b\c",
@"c\a", @"c\b", @"c\c",
@"a\a", @"a\b", @"a\c",
};
Array.Sort(data, new DirComp());
foreach ( string item in data ) {
Console.Write( item + "\t");
}
}
}