我想要有键值和值的集合 类似SortedList<key, value> 但我不想要key不能重复而且自动排序的
我想找一个可以重复key并且不能自动排序的  也就是说按照我存放的顺序不能变  有没有这样的集合
集合<1, 111>
集合<1, 1211>
集合<3, 111>
集合<2, 111>
这样的  不排序  也可以重复key

解决方案 »

  1.   

    自己设计
    class Node
    {
        int key;    int value;
    }
    List<Node> nodes
    ...........
      

  2.   

    如果key可以重复的话,比如以"abc"为key的key/value有100个,那么当以"abc"去查找的时候,你希望返回哪一个结果呢?针对你这种情况其实可以通过List<T>自定义实现。class KeyValue
    {
    private object _key;
    private object _value;
    public object Key
    {get{return _key;}set{_key=value;}}
    public object Value
    {
    {get{return _value;}set{_value=value;}}
    }
    }List<KeyValue> list=new List<KeyValue>();
      

  3.   

    利用keyvaluepair 自己定义一个新类,如下using System;
    using System.Collections.Generic;
    using System.Text;namespace list中比较大小
    {
        class Program
        {
            static void Main(string[] args)
            {            List<MyClass> l = new List<MyClass>();
                MyClass m1 = new MyClass();
                KeyValuePair<int, int> k1 = new KeyValuePair<int, int>(1, 111);
                m1.Kvp = k1;            MyClass m2 = new MyClass();
                KeyValuePair<int, int> k2 = new KeyValuePair<int, int>(1, 113);
                m2.Kvp = k2;            MyClass m3 = new MyClass();
                KeyValuePair<int, int> k3 = new KeyValuePair<int, int>(1, 99);
                m3.Kvp = k3;
                l.Add(m1);
                l.Add(m2);
                l.Add(m3);
                l.Sort();//排序过后
            }
        }    public class MyClass:IComparable
        {
            private KeyValuePair<int, int> _kvp;        public KeyValuePair<int, int> Kvp
            {
                get { return _kvp; }
                set { _kvp = value; }
            }        public int  CompareTo(object obj)
            {
                if (obj is MyClass)
                {
                    MyClass temp = (MyClass)obj;                return this.Kvp.Value.CompareTo(temp.Kvp.Value);
                }
                throw new ArgumentException("object is not a MyClass");   
            }
           
        }
    }
      

  4.   

    key如果相同的话,取哪个值?? 是你自己要设计的问题
      

  5.   

    算了 我找到了   重写个方法 确实要写个类  但我要说 确实有需要键值重复的时候.SortedList表示键/值对的集合,这些键值对按键排序且可以按索引进行查询访问。但默认情况下,此集合不可存储具有相同健的数据,而有时我们又需要存储这样的具有重复键值的集合,如结构上同一个单元上可能同时施加了不同工况下的荷载,如何实现这样的集合呢?  其实,.net中是用一个Compare函数来对添加到集合中的键进行比较的,只要这个函数返回的值不等于0,就可以正常向集合添加数据。网上找了个C#的例子,如下:using System;
    using System.Collections;namespace testSortedList
    {
        class Class1
        {
            [STAThread]
            static void Main(string[] args)
            {
                //声明可重复键的链表
                SortedList sl = new SortedList(new MySort());
                sl.Add(333, 333);
                sl.Add(111, 111);
                sl.Add(222, 222);
                sl.Add(111, 112);            PrintList(sl);            Console.ReadLine();
            }        private static void PrintList(SortedList sl)
            {
                for (int i = 0; i < sl.Count; i++)
                {
                    Console.WriteLine("{0}\t{1}", 
                    sl.GetKey(i), sl.GetByIndex(i));
                }
            }    }
        //继承接口IComparer
        public class MySort : IComparer
        {
            #region IComparer 成员
            public int Compare(object x, object y)
            {
                return -1;
                //排序
                //int iResult = (int)x - (int)y;
                //if(iResult == 0) iResult = -1;
                //return iResult;
            }
            #endregion
        }
    }
      

  6.   

    lz要的是SortedList<TKey, List<TValue>>吗?
      

  7.   

    sx
    那么多人帮你
    你TM还唧唧歪歪
      

  8.   

    using System;
    using System.Collections;
    using System.Collections.Specialized;public class SamplesNameValueCollection  {   public static void Main()  {      // Creates and initializes a new NameValueCollection.
          NameValueCollection myCol = new NameValueCollection();
          myCol.Add( "red", "rojo" );
          myCol.Add( "green", "verde" );
          myCol.Add( "blue", "azul" );
          myCol.Add( "red", "rouge" );      // Displays the values in the NameValueCollection in two different ways.
          Console.WriteLine( "Displays the elements using the AllKeys property and the Item (indexer) property:" );
          PrintKeysAndValues( myCol );
          Console.WriteLine( "Displays the elements using GetKey and Get:" );
          PrintKeysAndValues2( myCol );      // Gets a value either by index or by key.
          Console.WriteLine( "Index 1 contains the value {0}.", myCol[1] );
          Console.WriteLine( "Key \"red\" has the value {0}.", myCol["red"] );
          Console.WriteLine();      // Copies the values to a string array and displays the string array.
          String[] myStrArr = new String[myCol.Count];
          myCol.CopyTo( myStrArr, 0 );
          Console.WriteLine( "The string array contains:" );
          foreach ( String s in myStrArr )
             Console.WriteLine( "   {0}", s );
          Console.WriteLine();      // Searches for a key and deletes it.
          myCol.Remove( "green" );
          Console.WriteLine( "The collection contains the following elements after removing \"green\":" );
          PrintKeysAndValues( myCol );      // Clears the entire collection.
          myCol.Clear();
          Console.WriteLine( "The collection contains the following elements after it is cleared:" );
          PrintKeysAndValues( myCol );   }   public static void PrintKeysAndValues( NameValueCollection myCol )  {
          IEnumerator myEnumerator = myCol.GetEnumerator();
          Console.WriteLine( "   KEY        VALUE" );
          foreach ( String s in myCol.AllKeys )
             Console.WriteLine( "   {0,-10} {1}", s, myCol[s] );
          Console.WriteLine();
       }   public static void PrintKeysAndValues2( NameValueCollection myCol )  {
          Console.WriteLine( "   [INDEX] KEY        VALUE" );
          for ( int i = 0; i < myCol.Count; i++ )
             Console.WriteLine( "   [{0}]     {1,-10} {2}", i, myCol.GetKey(i), myCol.Get(i) );
          Console.WriteLine();
       }
    }/*This code produces the following output.Displays the elements using the AllKeys property and the Item (indexer) property:
       KEY        VALUE
       red        rojo,rouge
       green      verde
       blue       azulDisplays the elements using GetKey and Get:
       [INDEX] KEY        VALUE
       [0]     red        rojo,rouge
       [1]     green      verde
       [2]     blue       azulIndex 1 contains the value verde.
    Key "red" has the value rojo,rouge.The string array contains:
       rojo,rouge
       verde
       azulThe collection contains the following elements after removing "green":
       KEY        VALUE
       red        rojo,rouge
       blue       azulThe collection contains the following elements after it is cleared:
       KEY        VALUE
    */
      

  9.   

    都对都对,不就是写个新的 class 吗 ?