C# SortedList 可重复键的排序键/值对集合

简介:

代码

    public class Cost

    {

        public double cost;

        public int id;

    }


    public class CostComparer : IComparer<Cost>

    {

        public int Compare(Cost x, Cost y)

        {

            if (x.cost - y.cost < 1e-10)

            {

                return -1;

            }

            else

            {

                return 1;

            }

        }

    }



错误的写法:

SortedList<double> list = new SortedList<double>(new CostComparer());\\XX

SortedList<double, Cost> list = new SortedList<double, Cost>(new CostComparer());\\XX

错误提示:

非泛型 类型“System.Collections.SortedList”不能与类型实参一起使用


可行的写法,浪费存储空间,SortedList并没有提供直接根据索引访问集合元素的方法,所以只能够通过其他的方法访问:

        SortedList<Cost, Cost> list = new SortedList<Cost, Cost>(new CostComparer());


        Cost c1 = new Cost();

        c1.cost = 20;

        c1.id = 30;

        list.Add(c1, c1);


        Cost c2 = new Cost();

        c2.cost = 10;

        c2.id = 40;

        list.Add(c2, c2);

//方法一GetEnumerator

        IEnumerator<KeyValuePair<Cost, Cost>> iter = list.GetEnumerator();

        iter.MoveNext();    

        Cost tmpKey = iter.Current.Key;

        Cost tmpValue = iter.Current.Value;

 

//方法二foreach

        foreach (KeyValuePair<Cost, Cost> t in list)

        {

            Cost tmpKey = t.Key;

            Cost tmpValue = t.Value;

        }


删除某个索引键值对:         list.RemoveAt(0);


但是为了简单起见,实际上,只是对Cost中的cost字段进行排序,并且支持重复插入,可以使用SortedSet

        SortedSet<Cost> set = new SortedSet<Cost>(new CostComparer());\\OK




    本文转自fengyuzaitu 51CTO博客,原文链接:http://blog.51cto.com/fengyuzaitu/1903015,如需转载请自行联系原作者


相关文章
|
4月前
|
SQL 开发框架 .NET
C#进阶-LINQ实现对集合的增删改查
本篇演示了LINQ在日常开发中的常用操作,实现结果集的增删改查。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
40 0
|
5月前
|
存储 人工智能 C#
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
【Unity 3D】C#中数组、集合、栈、队列、哈希表、字典的讲解(附测试代码)
39 0
|
2月前
|
存储 SQL C#
C# 读取二维数组集合输出到Word预设表格
C# 读取二维数组集合输出到Word预设表格
|
2月前
|
存储 安全 C#
C#使用集合组织相关数据
C#使用集合组织相关数据
12 0
|
2月前
|
存储 安全 Java
34.C#:listT泛型集合
34.C#:listT泛型集合
18 1
|
2月前
|
存储 C#
33.c#:hashtable集合
33.c#:hashtable集合
16 1
|
2月前
|
存储 安全 Java
32.C#:ArrayList集合
32.C#:ArrayList集合
16 1
|
6月前
|
存储 安全 搜索推荐
c#集合_键值对Dictionary & SortedList
在 C# 中,键值对是一种常见的数据结构,可以使用不同的集合类实现。以下是常用的键值对集合类::一种使用哈希表实现的键值对集合。它通过将键哈希为桶号,然后将值存储在桶中进行快速查找。:一种基于数组实现的键值对集合。它会将键值对按照键排序并存储在数组中,以支持快速访问、查找和枚举。:一种使用红黑树实现的键值对集合。它能够按照键的排序进行快速查找,也可以快速地插入和删除键值对,并且该树具备自平衡的特性,使得插入、删除和搜索性能都非常优秀。
71 1
|
2月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
162 2
|
4月前
|
存储 C# C++
C# 笔记2 - 数组、集合与与文本文件处理
C# 笔记2 - 数组、集合与与文本文件处理
46 0