C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ソート(並び替え)について


(過去ログ 75 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■44208 / inTopicNo.1)  ソート(並び替え)について
  
□投稿者/ RT (194回)-(2009/12/01(Tue) 17:56:03)

分類:[C#] 

2009/12/01(Tue) 18:10:15 編集(投稿者)

こんにちは。
たびたびお世話になります。
C#でプログラミングを行っております。

質問なのですが、階層構造になったファイルパスを配列に入れて並び替えをしたいのですが、
規則は、A階層が浅い方が先に来て、Babcd順で、@index.htmlだけ例外的に先に来るようにしたいのです。
例)a\a\a より a\aの方が先。
優先順位は@、A、Bの順です。

アドバイスよろしくお願いします。
引用返信 編集キー/
■44210 / inTopicNo.2)  Re[1]: ソート(並び替え)について
□投稿者/ オショウ (437回)-(2009/12/01(Tue) 18:29:53)
No44208 (RT さん) に返信
> アドバイスよろしくお願いします。

  http://dobon.net/vb/dotnet/programing/icomparer.html#custom

  この掲載記事を元にソート方法を独自にインプリしたら
  できるかと・・・

以上。参考まで
引用返信 編集キー/
■44216 / inTopicNo.3)  Re[1]: ソート(並び替え)について
□投稿者/ επιστημη (2297回)-(2009/12/01(Tue) 22:27:52)
επιστημη さんの Web サイト
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");
    }
  }
}

引用返信 編集キー/
■44262 / inTopicNo.4)  Re[2]: ソート(並び替え)について
□投稿者/ RT (195回)-(2009/12/02(Wed) 18:56:56)
グリッドビューで行の追加をするたびに、
グリッドビューの2列目に表示しているパスで比べて並び替えをして、パスが同じ場合は、
グリッドビューの3列目に表示しているファイル名で比較して並び替え。
index.htmlが存在するパスの場合は、index.htmlを0.htmlに書き換えてから並び替え。
以上のように処理すると、1列目に表示されているファイルパスを思ったとおりに並び変える事が出来ました。

http://dobon.net/vb/dotnet/datagridview/customsort.html
のソースを使わせて頂きました。

オショウさん、επιστημη さんありがとうございました。またアドバイスよろしくお願いします。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -