当前位置:编程学习 > C#/ASP.NET >>

秀代码!C# 多重map的实现!

C# 没有Multimap,map只有SortedList HashTable;
这会很不方便,
但可以根据SortedList稍微加以改装,
即可实现C++的Multimap。
这里是一个例子:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;



using System.Collections;
using System.Collections.Specialized;
using MyNewMultimap;



namespace MyNewMultimap
{

    public class MyMultimap : SortedList
    {

        public MyMultimap()
        {            
        }

        public override  object this[object key]
        {
            get
            {
                if (this.IndexOfKey(key) >= 0)
                {
                    List<object> o = (List<object>)base[key];
                    return o;
                }

                return null;
            }

            set
            {
                if (this.IndexOfKey(key) >= 0)
                {
                    List<object> o = (List<object>)this[key];
                    o.Add(value);

                    return;
                }
                                
                List<object> ol = new List<object>();
                ol.Add((object)value);

                
                base[key] = ol;
                
            }
        }
    }
}


namespace Multimap
{
    class Program
    {
        static void Main(string[] args)
        {
            MyMultimap mm = new MyMultimap();


            mm["fruit"] = "banana";
            mm["fruit"] = "orange";
            mm["fruit"] = "potato";

            mm["programme language"] = "C++";
            mm["programme language"] = "C#";
            mm["programme language"] = "Delphi";

            // search
            int n = mm.IndexOfKey("programme language");
            if(n >= 0)
            {
                List<object> l = (List<object>)mm["programme language"];

                for (int i = 0; i < l.Count; i++)
                    Console.WriteLine(l[i]);
            }

        }
    }
}
--------------------编程问答-------------------- 不错,不过你这个有啥用,如果List<T>不能解决你的问题,Dictionary<T,T>应该能解决问题,如果还不行,还有DataSet --------------------编程问答-------------------- 顶  --------------------编程问答--------------------
引用 1 楼 assky124 的回复:
不错,不过你这个有啥用,如果List<T>不能解决你的问题,Dictionary<T,T>应该能解决问题,如果还不行,还有DataSet


如果还不行Dictionary<T,Dictionary<T,Dictionary<T,K>>>应该能解决你的问题 --------------------编程问答-------------------- Dictionary 好像不行;List不能满足需求;DataSet没试过 --------------------编程问答-------------------- list的find不就可以实现了吗? --------------------编程问答-------------------- 麻烦,
C#泛型早就内置了,
楼主用C++用多了吧,
C#基础功不扎实 --------------------编程问答-------------------- C#封装很多了,多研究下吧 --------------------编程问答-------------------- 没用过
从来没用MAP --------------------编程问答-------------------- 6楼,7楼既然都知道了,不妨嗮嗮具体的实现机制?
贴代码出来怎么样?  --------------------编程问答-------------------- 用object,和用泛型已经基本差不多了。

map 你们用的很少吗?这个可是基本的数据结构. --------------------编程问答-------------------- 别人给的 List<T> 和 Dictionary 不行就自己写个泛型类呗~ 活学活用 --------------------编程问答--------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;



using System.Collections;
using System.Collections.Specialized;
using MyNewMultimap;



namespace MyNewMultimap
{

    public class MyMultimap<T> : SortedList
    {

        public MyMultimap()
        {            
        }

        public override  object this[object key]
        {
            get
            {
                if (this.IndexOfKey(key) >= 0)
                {
                    List<T> o = (List<T>)base[key];
                    return o;
                }

                return null;
            }

            set
            {
                if (this.IndexOfKey(key) >= 0)
                {
                    List<T> o = (List<T>)this[key];
                    o.Add((T)value);

                    return;
                }
                                
                List<T> ol = new List<T>();
                ol.Add((T)value);

                
                base[key] = ol;
                
            }
        }
    }
}


namespace Multimap
{
    class Program
    {
        static void Main(string[] args)
        {
            MyMultimap<string> mm = new MyMultimap<string>();


            mm["fruit"] = "banana";
            mm["fruit"] = "orange";
            mm["fruit"] = "potato";

            mm["programme language"] = "C++";
            mm["programme language"] = "C#";
            mm["programme language"] = "Delphi";

            // search
            int n = mm.IndexOfKey("programme language");
            if(n >= 0)
            {
                List<string> l = (List<string>)mm["programme language"];

                for (int i = 0; i < l.Count; i++)
                    Console.WriteLine(l[i]);
            }

        }
    }
}


--------------------编程问答-------------------- 范型类 示例 代码 ; --------------------编程问答-------------------- 看的不是太懂 --------------------编程问答-------------------- 用不上,收藏 --------------------编程问答-------------------- 路过,顶一下,希望后面可以用得着。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,