○ソート

■演算子のオーバーロード

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#