2008年6月16日 星期一

自訂資料型別陣列排序

大家都知道陣列可以用array.sort()來排序和indexof()來索引 非常方便 但是自訂資料形態可能就不支援這種方法

因為一個自訂資料形態可能含有很多的資料 sort()會不知道以哪種來排序

以下是一個把自訂資料形態變成可排序和索引的sample code


public class Glyph : IComparable

{

//member

public UInt16 GlyfCode;

public smallGlyphMetric sMetric;

public byte[] data;


//method

public Glyph()

{

sMetric = new smallGlyphMetric();

}

public int CompareTo(object o)

{

if (!(o is Glyph))

{

throw new ArgumentException("o must be of type 'Glyph'");

}


Glyph v = (Glyph)o;

return GlyfCode - v.GlyfCode;

}

public override bool Equals(object obj)

{

if (Convert.ToUInt16(obj) == this.GlyfCode)

{

return true;

}

else

{

return false;

}

}

public UInt32 GetSize()

{

return Convert.ToUInt32(5 + data.Length);

}

}


要注意三個地方
1.要繼承IComparable這個class

public class Glyph : IComparable

2.要使用sort()就要加入CompareTo()這介面 大部份都照抄就好


public int CompareTo(object o)

{

if (!(o is Glyph))

{

throw new ArgumentException("o must be of type 'Glyph'");

}


Glyph v = (Glyph)o;

return GlyfCode - v.GlyfCode;

}


3.要使用indexof()就要加入Equals()這介面 大部份都照抄就好


public override bool Equals(object obj)

{

if (Convert.ToUInt16(obj) == this.GlyfCode)

{

return true;

}

else

{

return false;

}

}