鲁班人[ Ben's Blog]

-专注于建筑钢结构技术的发展与应用

« 在线结构分析软件-Fox用ANSYS生成三维旋转动画 »

可重复键值的SortedList集合实现

  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
    }
}

  上面代码不对SortedList进行排序,如果要实现自动排序功能,修改一下Compare函数为注释中的内容就可以了。


【轻松一下】:最近股市一天内创记录反弹了,谷歌也顺势推出了谷歌财经,可到底是不是已经触底了呢?专家学者仍众说纷纭,且不管它,看看这个《实话实说》版中国石油,笑过之后大家思索吧^_^

  • quote 1.daliang
  • 键/值的存储俺认为还是用map或multimap比较好,查找起来速度快。
    链表元素的查找的复杂度要比map中key和value的查找复杂度要高吧。
    ben 于 2008-4-29 8:58:28 回复
    说实话,用SortedList俺是借鉴你那篇“接力成熟结构软件二次开发的经验与实践”大作中的思路,不过貌视map只有在C++里有,偶在.net类库里没有找到想对应的类,请指教:)
  • 2008-4-28 17:27:54 回复该留言

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense

Copyright 2002-2008 Ben’s Weblog™. Some Rights Reserved.