○ソート
■演算子のオーバーロード
public class cell
{
public int i;
public string str;
public static bool operator ==(cell right,cell left)
{
return right.i==left.i;
}
public static bool operator !=(cell right,cell left)
{
return right.i!=left.i;
}
public static bool operator <(cell right,cell left)
{
return right.i<left.i;
}
public static bool operator >(cell right,cell left)
{
return right.i>left.i;
}
}
■配列のソート
int[] ar=new int[]{1,3,5,7,9,2,4,6,8,0};
{for(int i=0;i<10;i++) System.Diagnostics.Trace.WriteLine(ar[i].ToString());}
System.Diagnostics.Trace.WriteLine("");
System.Array.Sort(ar);//配列をソートする
{for(int i=0;i<10;i++) System.Diagnostics.Trace.WriteLine(ar[i].ToString());}
処理結果
1
3
5
7
9
2
4
6
8
0
0
1
2
3
4
5
6
7
8
9
■クラスの配列のソート
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
cell[] ar=new cell[10];
{for(int i=0;i<10;i++) ar[i]=new cell();}
ar[0].i=5;ar[0].str="5です";
ar[1].i=6;ar[1].str="6です";
ar[2].i=7;ar[2].str="7です";
ar[3].i=8;ar[3].str="8です";
ar[4].i=9;ar[4].str="9です";
ar[5].i=0;ar[5].str="0です";
ar[6].i=1;ar[6].str="1です";
ar[7].i=2;ar[7].str="2です";
ar[8].i=3;ar[8].str="3です";
ar[9].i=4;ar[9].str="4です";
{for(int i=0;i<10;i++) Console.WriteLine(ar[i].str);}
Console.WriteLine("");
System.Array.Sort(ar);//配列をソートする
{for(int i=0;i<10;i++) Console.WriteLine(ar[i].str);}
Console.Read();
}
}
}
public class cell : IComparable
{
public int i;
public string str;
public int CompareTo(object obj)
{
// this > object : 正の値を返す。
// this == object : 0を返す。
// this < object : 負の値を返す
return this.i-((cell)obj).i;
}
}
処理結果
5です
6です
7です
8です
9です
0です
1です
2です
3です
4です
0です
1です
2です
3です
4です
5です
6です
7です
8です
9です
■ArrayListを使ったソート
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Collections.ArrayList ar = new System.Collections.ArrayList();
ar.Add(new cell(5,"5です"));
ar.Add(new cell(6,"6です"));
ar.Add(new cell(7,"7です"));
ar.Add(new cell(8,"8です"));
ar.Add(new cell(9,"9です"));
ar.Add(new cell(0,"0です"));
ar.Add(new cell(1,"1です"));
ar.Add(new cell(2,"2です"));
ar.Add(new cell(3,"3です"));
ar.Add(new cell(4,"4です"));
for(int i=0;i<ar.Count;i++) Console.WriteLine(((cell)ar[i]).str );
Console.WriteLine("");
ar.Sort();
for(int i=0;i<ar.Count;i++) Console.WriteLine(((cell)ar[i]).str );
Console.Read();
}
}
}
public class cell : System.IComparable
{
public int i;
public string str;
public cell(int a,string b){i=a;str=b;}
public int CompareTo(object obj)
{
// this > object : 正の値を返す。
// this == object : 0を返す。
// this < object : 負の値を返す
return this.i-((cell)obj).i;
}
}
処理結果
5です
6です
7です
8です
9です
0です
1です
2です
3です
4です
0です
1です
2です
3です
4です
5です
6です
7です
8です
9です
■ArrayListを使った検索
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Collections.ArrayList ar = new System.Collections.ArrayList();
ar.Add(new cell(5,"5です"));
ar.Add(new cell(6,"6です"));
ar.Add(new cell(7,"7です"));
ar.Add(new cell(8,"8です"));
ar.Add(new cell(9,"9です"));
ar.Add(new cell(0,"0です"));
ar.Add(new cell(1,"1です"));
ar.Add(new cell(2,"2です"));
ar.Add(new cell(3,"3です"));
ar.Add(new cell(4,"4です"));
ar.Sort();//BinarySearchは並べ替えられている必要があり
int i=ar.BinarySearch(new cell(4,""));//検索
Console.WriteLine(((cell)ar[i]).str);
Console.Read();
}
}
}
public class cell : System.IComparable
{
public int i;
public string str;
public cell(int a,string b){i=a;str=b;}
public int CompareTo(object obj)
{
// this > object : 正の値を返す。
// this == object : 0を返す。
// this < object : 負の値を返す
return this.i-((cell)obj).i;
}
}
処理結果
4です
■ArrayListを使ったソート2
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Collections.ArrayList ar = new System.Collections.ArrayList();
ar.Add(new cell(5,"5です"));
ar.Add(new cell(6,"6です"));
ar.Add(new cell(7,"7です"));
ar.Add(new cell(8,"8です"));
ar.Add(new cell(9,"9です"));
ar.Add(new cell(0,"0です"));
ar.Add(new cell(1,"1です"));
ar.Add(new cell(2,"2です"));
ar.Add(new cell(3,"3です"));
ar.Add(new cell(4,"4です"));
for(int i=0;i<ar.Count;i++) Console.WriteLine(((cell)ar[i]).str );
Console.WriteLine("");
ar.Sort(new testCompare()) ;
for(int i=0;i<ar.Count;i++) Console.WriteLine(((cell)ar[i]).str );
Console.Read();
}
}
}
public class testCompare : System.Collections.IComparer
{
public int Compare(object right,object left)
{
// right > left : 正の値を返す。
// right == left : 0を返す。
// right < left : 負の値を返す
return ((cell)right).i-((cell)left).i;
}
}
public class cell
{
public int i;
public string str;
public cell(int a,string b){i=a;str=b;}
}
処理結果
5です
6です
7です
8です
9です
0です
1です
2です
3です
4です
0です
1です
2です
3です
4です
5です
6です
7です
8です
9です
■ArrayListを使った検索2
using System;
namespace ConsoleApplication1
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Collections.ArrayList ar = new System.Collections.ArrayList();
ar.Add(new cell(5,"5です"));
ar.Add(new cell(6,"6です"));
ar.Add(new cell(7,"7です"));
ar.Add(new cell(8,"8です"));
ar.Add(new cell(9,"9です"));
ar.Add(new cell(0,"0です"));
ar.Add(new cell(1,"1です"));
ar.Add(new cell(2,"2です"));
ar.Add(new cell(3,"3です"));
ar.Add(new cell(4,"4です"));
ar.Sort(new testCompare());//BinarySearchは並べ替えられている必要があり
int i=ar.BinarySearch(new cell(4,""),new testCompare());//検索
Console.WriteLine(((cell)ar[i]).str);
Console.Read();
}
}
}
public class testCompare : System.Collections.IComparer
{
public int Compare(object right,object left)
{
// right > left : 正の値を返す。
// right == left : 0を返す。
// right < left : 負の値を返す
return ((cell)right).i-((cell)left).i;
}
}
public class cell
{
public int i;
public string str;
public cell(int a,string b){i=a;str=b;}
}
処理結果
4です
▲トップページ
>
Visual BASIC と C#