﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-ChengKing-文章分类-C#之Collection探讨</title><link>http://www.cnitblog.com/ChengKing/category/1232.html</link><description>ChengKing</description><language>zh-cn</language><lastBuildDate>Thu, 29 Sep 2011 05:34:34 GMT</lastBuildDate><pubDate>Thu, 29 Sep 2011 05:34:34 GMT</pubDate><ttl>60</ttl><item><title>Collection -&gt; 由IComparer派生的自定义比较器</title><link>http://www.cnitblog.com/ChengKing/articles/3996.html</link><dc:creator>ZhengJian</dc:creator><author>ZhengJian</author><pubDate>Sun, 06 Nov 2005 04:28:00 GMT</pubDate><guid>http://www.cnitblog.com/ChengKing/articles/3996.html</guid><wfw:comment>http://www.cnitblog.com/ChengKing/comments/3996.html</wfw:comment><comments>http://www.cnitblog.com/ChengKing/articles/3996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ChengKing/comments/commentRss/3996.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ChengKing/services/trackbacks/3996.html</trackback:ping><description><![CDATA[<P>(一). 说明</P>
<P>1.继承IComparer接口,可以自定义比较器<BR>2.由于Array.Sort()方法接受IComparer参数,进行自定义排序规则.<BR>&nbsp;&nbsp; 示例中也将IComparer作为Sort方法的参数,将Icomparer应用于Array.Sort()方法</P>
<P>(二).示例代码</P>
<P>using System;<BR>using System.Collections;</P>
<P>namespace 比较器IComparer<BR>{<BR>&nbsp;/// &lt;summary&gt;<BR>&nbsp;/// Class1 的摘要说明。<BR>&nbsp;/// &lt;/summary&gt;<BR>&nbsp;public class Person<BR>&nbsp;{<BR>&nbsp;&nbsp;public int ID;<BR>&nbsp;&nbsp;public int Age;<BR>&nbsp;&nbsp;public Person()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;ID=0;<BR>&nbsp;&nbsp;&nbsp;Age=0;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;public Person(int id,int age)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;ID=id;<BR>&nbsp;&nbsp;&nbsp;Age=age;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;public void Show()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("年龄={0},代号={1}",Age,ID);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;public static void&nbsp; ShowPersons(Person []persons)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;foreach(Person person in persons)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("年龄={0},代号={1}",person.Age,person.ID);<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;public class PersonComparer:System.Collections.IComparer<BR>&nbsp;{<BR>&nbsp;&nbsp;int System.Collections.IComparer.Compare(object x,object y)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if(x==null||y==null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new ArgumentException("参数不能为空");&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;Person temp=new Person();<BR>&nbsp;&nbsp;&nbsp;if(!x.GetType().Equals(temp.GetType())||!y.GetType().Equals(temp.GetType()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentException("类型不一致");<BR>&nbsp;&nbsp;&nbsp;temp=null;<BR>&nbsp;&nbsp;&nbsp;Person personX=(Person)x;<BR>&nbsp;&nbsp;&nbsp;Person personY=(Person)y;<BR>&nbsp;&nbsp;&nbsp;if(personX.ID&gt;personY.ID)<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>&nbsp;&nbsp;&nbsp;if(personX.ID&lt;personY.ID)<BR>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;if(personX.Age&gt;personY.Age)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 1;<BR>&nbsp;&nbsp;&nbsp;if(personX.Age&lt;personY.Age)<BR>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;class Class1<BR>&nbsp;{<BR>&nbsp;&nbsp;/// &lt;summary&gt;<BR>&nbsp;&nbsp;/// 应用程序的主入口点。<BR>&nbsp;&nbsp;/// &lt;/summary&gt;<BR>&nbsp;&nbsp;[STAThread]<BR>&nbsp;&nbsp;static void Main(string[] args)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;// TODO: 在此处添加代码以启动应用程序<BR>&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;Random rand=new Random();<BR>&nbsp;&nbsp;&nbsp;Person[] persons=new Person[6];<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("随机产生的Person数组为:");<BR>&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;persons.GetLength(0);i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;persons[i]=new Person();<BR>&nbsp;&nbsp;&nbsp;&nbsp;persons[i].ID=rand.Next()%10;<BR>&nbsp;&nbsp;&nbsp;&nbsp;persons[i].Age=rand.Next()%50;<BR>&nbsp;&nbsp;&nbsp;&nbsp;persons[i].Show();<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;PersonComparer personComparer=new PersonComparer();<BR>&nbsp;&nbsp;&nbsp;//System.Collections.IComparer personComparer=new IComparer;<BR>&nbsp;&nbsp;&nbsp;Array.Sort(persons,personComparer);<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("排序后的结果:");<BR>&nbsp;&nbsp;&nbsp;Person.ShowPersons(persons);<BR>&nbsp;&nbsp;&nbsp;Person personToBeFind=new Person();<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("输入ID");<BR>&nbsp;&nbsp;&nbsp;personToBeFind.ID=int.Parse(Console.ReadLine());<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("输入Age");<BR>&nbsp;&nbsp;&nbsp;personToBeFind.Age=int .Parse(Console.ReadLine());<BR>&nbsp;&nbsp;&nbsp;int index=Array.BinarySearch(persons,personToBeFind,personComparer);<BR>&nbsp;&nbsp;&nbsp;if(index&gt;=0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("待查找的元素是数组的第{0}个元素",index+1);<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("对不起,没有所找的元素");<BR>&nbsp;&nbsp;&nbsp;Console.ReadLine();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>}</P>
<P></P>
<P><BR>&nbsp;</P><img src ="http://www.cnitblog.com/ChengKing/aggbug/3996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ChengKing/" target="_blank">ZhengJian</a> 2005-11-06 12:28 <a href="http://www.cnitblog.com/ChengKing/articles/3996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection -&gt; Array的排序(正序/逆序)</title><link>http://www.cnitblog.com/ChengKing/articles/3995.html</link><dc:creator>ZhengJian</dc:creator><author>ZhengJian</author><pubDate>Sun, 06 Nov 2005 04:27:00 GMT</pubDate><guid>http://www.cnitblog.com/ChengKing/articles/3995.html</guid><wfw:comment>http://www.cnitblog.com/ChengKing/comments/3995.html</wfw:comment><comments>http://www.cnitblog.com/ChengKing/articles/3995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ChengKing/comments/commentRss/3995.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ChengKing/services/trackbacks/3995.html</trackback:ping><description><![CDATA[<P>using System;</P>
<P>namespace Array操作<BR>{<BR>&nbsp;/// &lt;summary&gt;<BR>&nbsp;/// Class1 的摘要说明。<BR>&nbsp;/// &lt;/summary&gt;<BR>&nbsp;class Class1<BR>&nbsp;{<BR>&nbsp;&nbsp;/// &lt;summary&gt;<BR>&nbsp;&nbsp;/// 应用程序的主入口点。<BR>&nbsp;&nbsp;/// &lt;/summary&gt;<BR>&nbsp;&nbsp;[STAThread]<BR>&nbsp;&nbsp;static void Main(string[] args)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;// TODO: 在此处添加代码以启动应用程序<BR>&nbsp;&nbsp;&nbsp;//<BR>&nbsp;&nbsp;&nbsp;String[] friends=new String[]{"2mojian","1zhengjian","3xugang","4guoyonghui"};<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("操作前数组数据为:");<BR>&nbsp;&nbsp;&nbsp;foreach(string index in friends)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(index+" ");<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Array.Sort(friends);<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("\n排序后的数据为:");<BR>&nbsp;&nbsp;&nbsp;for(int i=friends.GetLowerBound(0);i&lt;=friends.GetUpperBound(0);i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(friends[i]+" ");<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Array.Reverse(friends);<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("\n逆序后的数据为:");<BR>&nbsp;&nbsp;&nbsp;for(int i=friends.GetLowerBound(0);i&lt;=friends.GetUpperBound(0);i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.Write(friends[i]+" ");<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine();<BR>&nbsp;&nbsp;&nbsp;Console.Read();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>}<BR></P><img src ="http://www.cnitblog.com/ChengKing/aggbug/3995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ChengKing/" target="_blank">ZhengJian</a> 2005-11-06 12:27 <a href="http://www.cnitblog.com/ChengKing/articles/3995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection -&gt; 集合的同步执行</title><link>http://www.cnitblog.com/ChengKing/articles/3994.html</link><dc:creator>ZhengJian</dc:creator><author>ZhengJian</author><pubDate>Sun, 06 Nov 2005 04:26:00 GMT</pubDate><guid>http://www.cnitblog.com/ChengKing/articles/3994.html</guid><wfw:comment>http://www.cnitblog.com/ChengKing/comments/3994.html</wfw:comment><comments>http://www.cnitblog.com/ChengKing/articles/3994.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ChengKing/comments/commentRss/3994.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ChengKing/services/trackbacks/3994.html</trackback:ping><description><![CDATA[<P>using System;<BR>using System.Collections;<BR>using System.Collections.Specialized;</P>
<P>namespace 集合和同步<BR>{<BR>&nbsp;/// &lt;summary&gt;<BR>&nbsp;/// Class1 的摘要说明。<BR>&nbsp;/// &lt;/summary&gt;<BR>&nbsp;class Class1<BR>&nbsp;{<BR>&nbsp;&nbsp;public static void DemoLockCollection()<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;StringDictionary sDic=new StringDictionary() ;<BR>&nbsp;&nbsp;&nbsp;if(!sDic.IsSynchronized)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;sDic.Add("晓华","花园路");<BR>&nbsp;&nbsp;&nbsp;&nbsp;sDic["小杨"]="新兴桥";<BR>&nbsp;&nbsp;&nbsp;&nbsp;foreach(string key in sDic.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("姓名={0},地址={1}",key,sDic[key]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//不采取同步处理代码<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}&nbsp;&nbsp;<BR>&nbsp;&nbsp;[STAThread]<BR>&nbsp;&nbsp;static void Main(string[] args)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;//以下一行代码为类DemoLockCollection()的运行&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;Class1.DemoLockCollection();<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//以下代码为另一个HashTable的例程<BR>&nbsp;&nbsp;&nbsp;//创建并初始化一个哈希表<BR>&nbsp;&nbsp;&nbsp;Hashtable myHT=new Hashtable();<BR>&nbsp;&nbsp;&nbsp;myHT.Add(0,"zero");<BR>&nbsp;&nbsp;&nbsp;myHT.Add(1,"one");<BR>&nbsp;&nbsp;&nbsp;myHT.Add(2,"two");<BR>&nbsp;&nbsp;&nbsp;myHT.Add(3,"three");<BR>&nbsp;&nbsp;&nbsp;myHT.Add(4,"four");<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//创建线程安全的包装<BR>&nbsp;&nbsp;&nbsp;Hashtable mySyncdHT=Hashtable.Synchronized(myHT);<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//显示哈萨克希表的同步的状态<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("myHT{0}.",myHT.IsSynchronized ? "已经同步" : "没有同步");<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("mySncdHT{0}.",mySyncdHT.IsSynchronized ? "已经同步" : "没有同步");</P>
<P>&nbsp;&nbsp;&nbsp;//遍历哈希<BR>&nbsp;&nbsp;&nbsp;foreach(Object key in mySyncdHT.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Key={0},Value={1]",key,mySyncdHT[key]);</P>
<P>&nbsp;&nbsp;&nbsp;Console.Read();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>}</P>
<P></P>
<P><BR>&nbsp;</P><img src ="http://www.cnitblog.com/ChengKing/aggbug/3994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ChengKing/" target="_blank">ZhengJian</a> 2005-11-06 12:26 <a href="http://www.cnitblog.com/ChengKing/articles/3994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection -&gt; 集合的拷贝</title><link>http://www.cnitblog.com/ChengKing/articles/3993.html</link><dc:creator>ZhengJian</dc:creator><author>ZhengJian</author><pubDate>Sun, 06 Nov 2005 04:25:00 GMT</pubDate><guid>http://www.cnitblog.com/ChengKing/articles/3993.html</guid><wfw:comment>http://www.cnitblog.com/ChengKing/comments/3993.html</wfw:comment><comments>http://www.cnitblog.com/ChengKing/articles/3993.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ChengKing/comments/commentRss/3993.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ChengKing/services/trackbacks/3993.html</trackback:ping><description><![CDATA[<P>using System;<BR>using System.Collections;<BR>using System.Collections.Specialized;</P>
<P>namespace 集合的拷贝<BR>{<BR>&nbsp;/// &lt;summary&gt;<BR>&nbsp;/// Class1 的摘要说明。<BR>&nbsp;/// &lt;/summary&gt;<BR>&nbsp;class Class1<BR>&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;[STAThread]<BR>&nbsp;&nbsp;static void Main(string[] args)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;NameValueCollection namedVColl=new NameValueCollection();<BR>&nbsp;&nbsp;&nbsp;namedVColl.Add("晓华","13510532686");<BR>&nbsp;&nbsp;&nbsp;namedVColl.Add("晓华","62658888");<BR>&nbsp;&nbsp;&nbsp;namedVColl.Add("小杨","1361030486");<BR>&nbsp;&nbsp;&nbsp;namedVColl.Add("小杨","62293218");<BR>&nbsp;&nbsp;&nbsp;foreach(string key in namedVColl.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("姓名={0}，电话={1}",key,namedVColl[key]);<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("拷贝后获得的命名值集合");<BR>&nbsp;&nbsp;&nbsp;string[] arr=new string[namedVColl.Count];<BR>&nbsp;&nbsp;&nbsp;namedVColl.CopyTo(arr,0);<BR>&nbsp;&nbsp;&nbsp;for(int i=arr.GetLowerBound(0);i&lt;arr.GetUpperBound(0);i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("姓名={0}，电话={1}",namedVColl.AllKeys[i],arr[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Hashtable hhtable=new Hashtable();<BR>&nbsp;&nbsp;&nbsp;hhtable["晓华"]="北京";<BR>&nbsp;&nbsp;&nbsp;hhtable["小杨"]="南京";<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("克隆前哈希表");<BR>&nbsp;&nbsp;&nbsp;foreach(object key in hhtable.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("姓名={0}，地址={1}",key,hhtable[key]);<BR>&nbsp;&nbsp;&nbsp;Hashtable hhCloned=(Hashtable)hhtable.Clone();<BR>&nbsp;&nbsp;&nbsp;hhtable["晓华"]="上海";<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("克隆修改初始化哈希表");<BR>&nbsp;&nbsp;&nbsp;foreach(object key in hhtable.Keys)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Console.WriteLine("姓名={0}，地址={1}",key,hhtable[key]);<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("修改后初始化哈希表后的克隆哈萨克希表");<BR>&nbsp;&nbsp;&nbsp;foreach(object key in hhCloned.Keys)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("姓名={0}，地址={1}",key,hhCloned[key]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Console.Read();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>}<BR></P>
<P></P>
<P>&nbsp;</P><img src ="http://www.cnitblog.com/ChengKing/aggbug/3993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ChengKing/" target="_blank">ZhengJian</a> 2005-11-06 12:25 <a href="http://www.cnitblog.com/ChengKing/articles/3993.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection -&gt; 用SortedList实现排序</title><link>http://www.cnitblog.com/ChengKing/articles/3992.html</link><dc:creator>ZhengJian</dc:creator><author>ZhengJian</author><pubDate>Sun, 06 Nov 2005 04:24:00 GMT</pubDate><guid>http://www.cnitblog.com/ChengKing/articles/3992.html</guid><wfw:comment>http://www.cnitblog.com/ChengKing/comments/3992.html</wfw:comment><comments>http://www.cnitblog.com/ChengKing/articles/3992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ChengKing/comments/commentRss/3992.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ChengKing/services/trackbacks/3992.html</trackback:ping><description><![CDATA[<P>using System;<BR>using System.Collections;</P>
<P>namespace 集合的比较和排序<BR>{<BR>&nbsp;<BR>&nbsp;public class Efficience:IComparable<BR>&nbsp;{<BR>&nbsp;&nbsp;private int workHour;<BR>&nbsp;&nbsp;private int outPut;<BR>&nbsp;&nbsp;int IComparable.CompareTo(Object obj)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;if(obj==null)<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentException("比较对象不能为空");<BR>&nbsp;&nbsp;&nbsp;if(!obj.GetType().Equals(this.GetType()))<BR>&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentException("比较的两者类型不同");<BR>&nbsp;&nbsp;&nbsp;Efficience objEffic=(Efficience)obj;<BR>&nbsp;&nbsp;&nbsp;if(this.Effic&gt;objEffic.Effic)<BR>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<BR>&nbsp;&nbsp;&nbsp;if(this.Effic&lt;objEffic.Effic)<BR>&nbsp;&nbsp;&nbsp;&nbsp;return -1;<BR>&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;public int WorkHour<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;set<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(value&lt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentException("工作时间不能为{0}或负数");<BR>&nbsp;&nbsp;&nbsp;&nbsp;workHour=value;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;public int OutPut<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;set<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(value&lt;0)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw new ArgumentException("工作产出不能为负数");<BR>&nbsp;&nbsp;&nbsp;&nbsp;outPut=value;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;public float Effic<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;get<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;return (float)outPut/(float)workHour;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>&nbsp;class Class1<BR>&nbsp;{&nbsp;&nbsp;<BR>&nbsp;&nbsp;[STAThread]<BR>&nbsp;&nbsp;static void Main(string[] args)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;Random rand=new Random();<BR>&nbsp;&nbsp;&nbsp;Efficience[] effics=new Efficience[5];<BR>&nbsp;&nbsp;&nbsp;string[] persons={"Xiaohua","Diana","YanYan","ZhuLin","LiXin"};<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("生成的 Effics 数组");<BR>&nbsp;&nbsp;&nbsp;//Console.WriteLine("effics.GetLowerBound(0)={0},effics.GetUpperBound(0)={1}",effics.GetLowerBound(0),effics.GetUpperBound(0));<BR>&nbsp;&nbsp;&nbsp;for(int i=effics.GetLowerBound(0);i&lt;=effics.GetUpperBound(0);i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;effics[i]=new Efficience();<BR>&nbsp;&nbsp;&nbsp;&nbsp;effics[i].WorkHour=rand.Next()%24;<BR>&nbsp;&nbsp;&nbsp;&nbsp;effics[i].OutPut=rand.Next()%1000;<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Person={0},Effic={1}",persons[i],effics[i].Effic);<BR>&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;SortedList sortedList=new SortedList();<BR>&nbsp;&nbsp;&nbsp;for(int i=effics.GetLowerBound(0);i&lt;=effics.GetUpperBound(0);i++)<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;sortedList.Add(effics[i],persons[i]);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Console.WriteLine("从 sortedList 中读取内容");<BR>&nbsp;&nbsp;&nbsp;foreach(Efficience effic in sortedList.GetKeyList())<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;Console.WriteLine("Person={0},Effic={1}",sortedList[effic],effic.Effic);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;Console.Read();<BR>&nbsp;&nbsp;}<BR>&nbsp;}<BR>}<BR></P>
<P></P>
<P>&nbsp;</P><img src ="http://www.cnitblog.com/ChengKing/aggbug/3992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ChengKing/" target="_blank">ZhengJian</a> 2005-11-06 12:24 <a href="http://www.cnitblog.com/ChengKing/articles/3992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Collection -&gt; .Net集合类型大全,只要灵活运用可以节省很多开发时间和提高程序运行效率</title><link>http://www.cnitblog.com/ChengKing/articles/3991.html</link><dc:creator>ZhengJian</dc:creator><author>ZhengJian</author><pubDate>Sun, 06 Nov 2005 04:23:00 GMT</pubDate><guid>http://www.cnitblog.com/ChengKing/articles/3991.html</guid><wfw:comment>http://www.cnitblog.com/ChengKing/comments/3991.html</wfw:comment><comments>http://www.cnitblog.com/ChengKing/articles/3991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/ChengKing/comments/commentRss/3991.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/ChengKing/services/trackbacks/3991.html</trackback:ping><description><![CDATA[<P>集合</P>
<P>&nbsp; ((I)).集合类型&nbsp; <BR>&nbsp;&nbsp;&nbsp; 1.一般集合<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I.Array<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.Array中的秩是Array中的维数.一个Array可以有一个或多个秩.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Array具有固定的容量.如果有可变容量,则用Array.CreateInstance,其可以不从零开始存储.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; II.ArrayList集合类型<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.是数组的复杂版本.Array是数组是固定的,而ArrayList类是根据需要自动扩展的.如果更改了Array.Capacity属性的值,则自动&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 进行内存重新分配和元素复制.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.ArrayList提供添加/或移除某一范围元素的方法.在Array中,只能一次获取或设置一个元素的值.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.使用 Synchronized方法可以很容易地创建ArrayList的同步版本.而Array将一直保持它,直到用户实现同步为止.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; d.ArrayList提供将只读和固定大小包装返回到集合的方法.而Array不提供.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.Array提供ArrayList所不具有的某些灵活性.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I.可以设置Array的下限,但ArrayList的下限始终为零.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; II.Array可以具有多个维度,而ArrayList始终是唯一的.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; III.Array是特定类型(不是Object),比ArrayList性能好.ArrayList在存储和检索时经常发生拆箱和装箱操作现象.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; III.哈希表集合<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.Hashtable类基于IDictionary接口,因此该集合中的每一元素是键和值对.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.Object.GetHashCode方法为其自身生成哈希代码.还可以通过使用Hashtable构造函数,为所有元素指定一个哈希函数.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IV.SortedList集合类型<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.SortedList类类似于Hashtable和ArrayList间的混合.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.SortedList的每一元素都是键对值,提供只返回键列表或只返回值列表的方法.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.如果想要一个保留键和值的集合,并且还需要索引的灵活性,则使用SortList.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; V.队列集合类型 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.如果需要以信息在集合中存储的相同顺序来访问这些信息,请使用Queue.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.Enqueue将一个元素添加到Queue的队尾. Dequeue从Queue处移除最旧的元素. Peek从Queue的开始处返回最旧的元素,但不将从Queue中移除.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VI.堆栈集合类型<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.如果需要以信息在集合中存储的相反顺序来访问这些信息,请使用Queue.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.Push在Stack的顶部插入一个元素. Pop在Stack的顶部移除一个元素. Peek返回处于Stack顶部的元素,但不将其从栈顶上移除.<BR>&nbsp;&nbsp;&nbsp;&nbsp; 2.位集合<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I.BitArray<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.BitArray是一个集合类,容量与计数相同.通过增加Length属性来将元素添加到BitArray中;通过降低Length属性将元素删除.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.独特方法,如 And/Or/Xor/Not/SetAll.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.位于 System.Collections中.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; II.BitVector32<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.速度快,精确存储32位,并且同时存储标志位和小整数.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b.位于 System.Collections.Specialized中. <BR>&nbsp;&nbsp;&nbsp;&nbsp; 3.专用集合 <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I.NameValueCollection<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a.基于NameObjectCollectionBase,但NameValueCollection可以接受每个键多个值,而 NameObjectCollectionBase接受每个键,但只有一个值.&nbsp;&nbsp; <BR>&nbsp;&nbsp; ((2)).选择用哪种集合 <BR>&nbsp;&nbsp;&nbsp;&nbsp; *** Queue或Stack:需要一个序列列表,其中的元素在检索后放弃.否则,用其它集合.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *** Queue或Stack:按一定的顺序访问这些元素(先进先出,后进先出),如果随机,用其它集合.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *** 是否通过索引访问每一个元素?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * ArrayList和StringCollection 提供通过元素的从零开始的*索引*对其元素进行访问.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (Hashtable) (SortedList) (ListDictionary) (StringDictionary) 提供通过元素的*键*对其元素进行访问<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * (NameObjectCollectionBase) 和 (NameValueCollection) 提供或者通过元素的从零开始的*索引*或者通过元素的*键*对其元素进行访问.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *** 每一元素将包含一个值/一个值和一个键的组合还是一个键和多个值的组合?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 一个值: 使用基于 IList 的任何集合<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 一个键和一个值: 使用基于 IDictionary 的任何集合.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 一个键和多个值: 使用 System.Collections.Specialized 命名空间中的 NameValueCollection 类.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *** 是否需要用与元素方式不同的方式对元素排序?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Hashtable 通过键的哈希代码对元素进行排序.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * SortedList 基于 IComparer 实现,通过键对元素进行排序.<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * ArrayList 提供 Sort方法该方法将 IComparer 实现作为一个参数采用.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *** 是否需要信息的快速搜索和检索?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * 对于小集合(十项或更少),ListDictionary 快于 Hashtable.<BR>&nbsp;&nbsp;&nbsp;&nbsp; *** 是否需要只接受字符串的集合?<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * StringCollection (基于 IList) 和 StringDictionary (基于 IDictionary) 位于 System.Collections.Specialized 命名空间中.<BR></P><img src ="http://www.cnitblog.com/ChengKing/aggbug/3991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/ChengKing/" target="_blank">ZhengJian</a> 2005-11-06 12:23 <a href="http://www.cnitblog.com/ChengKing/articles/3991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>