首页 新闻 赞助 找找看

有关 Hashtable 和 SortedList

0
悬赏园豆:50 [已解决问题] 解决于 2008-12-25 09:19

其实是想要一个不定项的数组,有Key 和 Value,在遍历的时候符合先进先出,就是遍历出来的顺序与Add的顺序是一致的。

而用 Hashtable 在遍历的时候会随机排列,因为 Hashtable 本事就是无序的;

用 SortedList 在遍历的时候又会根据 Key 的字母顺序排列最终 的结果(用在我的需求上画蛇添足了);

有没有其他什么对象可以实现我这个简单的功能,难道要用数组来模拟吗?

burning的主页 burning | 初学一级 | 园豆:0
提问于:2008-09-29 11:40
< >
分享
最佳答案
0

Queue队列

你存的元素改为KeyValuePair或自定义的Key-Value对的类即可

命名空间:  System.Collections

 

Code
using System;
using System.Collections;
public class SamplesQueue {

public static void Main() {

// Creates and initializes a new Queue.
Queue myQ = new Queue();
myQ.Enqueue(
"Hello");
myQ.Enqueue(
"World");
myQ.Enqueue(
"!");

// Displays the properties and values of the Queue.
Console.WriteLine( "myQ" );
Console.WriteLine(
"\tCount: {0}", myQ.Count );
Console.Write(
"\tValues:" );
PrintValues( myQ );
}


public static void PrintValues( IEnumerable myCollection ) {
foreach ( Object obj in myCollection )
Console.Write(
" {0}", obj );
Console.WriteLine();
}
}
/*
This code produces the following output.

myQ
Count: 3
Values: Hello World !
*/
重典 | 老鸟四级 |园豆:2442 | 2008-09-29 12:13
其他回答(4)
0

遍历出来的顺序与Add的顺序是一致的
先进先出(FIFO, First in first out),明显该用队列,你就封装个类存进Queue好了,或者就直接存KeyValuePair吧

JimLiu | 园豆:300 (菜鸟二级) | 2008-09-29 20:09
0

最好的选择是写个类,内部包含一个KeyValuePair的队列或者List,再包含一个Dictionary,这种情况下可以得到获取为O(1)的复杂度以及先进先出的遍历

Gray Zhang | 园豆:17610 (专家六级) | 2008-09-29 23:12
0

List<Pair> list = new List<Pair>();

Pair p = new Pair(key, value);//不能监视 key 的唯一性,如果有对 key 唯一性的追求,那么该用 Dictionary<object, object>

foreach(Pair p in list){

      //original order

}

 

Dictionary<object, object> dic = new Dictionary<object, object>();//保证 key 唯一,并且可以随即快速索引某 key 的对应值

List<object> oriOrder = new List<object>();//原始序列

//for adding

if(!dic.ContainsKey(key)){

    dic.Add(key, value);

    oriOrder.Add(key);

}

//for enumerator

foreach(object key in oriOrder){

    //key

    object value = dic[key];

}

 

张大侠的意思大概是把上面的包装成某一个 QueueableDictionary, 继承 Dictionary<T, K> 以及重载 IEnumerator 接口的方法.

陛下 | 园豆:3938 (老鸟四级) | 2008-09-30 11:17
0

可以将扩充hashtable来实现楼主的这个要求。

思路:重写hashtable的Add,clear,remove方法,等,用ArrayList来添加它的key(ArrayList存在先进先出特性)。代码如何下:

Code

加冰的可乐 | 园豆:410 (菜鸟二级) | 2008-09-30 12:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册