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;

}

}

沒有留言:

張貼留言

您的留言會先經過審核後才會公開至版面上

若本站所分享的資訊對您有幫助或有幫您省到錢的話

麻煩在留完言之後順手幫個忙

瀏覽一些您有興趣的廣告連結當作回饋贊助

您的小小鼓勵是支持本站繼續分享的最大動力

謝謝各位善心人士!! :)