c#的sortedlist使用方法
发布时间:2023-09-22 04:58:13
表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。
SortedList最合适对一列健/值对 进行排序,在排序时,是对键进行排序,SortedList 是 Hashtable 和 Array 的混合。当使用 Item 索引器属性按照元素的键访问元素时,其行为类似于 Hashtable。当使用 GetByIndex 或 SetByIndex 按照元素的索引访问元素时,其行为类似于 Array。
SortedList 在内部维护两个数组以将数组存储到列表中;即,一个数组用于键,另一个数组用于相关联的值。每个元素都是一个可作为 DictionaryEntry 对象进行访问的键/值对。键不能为空引用(Visual Basic 中为 Nothing),但值可以。SortedList 的容量是列表可拥有的元素数。随着向 SortedList 中添加元素,容量通过重新分配按需自动增加。可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量。SortedList 的元素将按照特定的 IComparer 实现(在创建SortedList 时指定)或按照键本身提供的 IComparable 实现并依据键来进行排序。不论在哪种情况下,SortedList 都不允许重复键。
索引顺序基于排序顺序。当添加元素时,元素将按正确的排序顺序插入 SortedList,同时索引会相应地进行调整。若移除了元素,索引也会相应地进行调整。因此,当在SortedList 中添加或移除元素时,特定键/值对的索引可能会更改。
由于要进行排序,所以在 SortedList 上操作比在 Hashtable 上操作要慢。但是,SortedList 允许通过相关联键或通过索引对值进行访问,可提供更大的灵活性。
一。添加删除
1。public virtual void Add(object key,object value);
此集合中的索引从零开始。
将带有指定键和值的元素添加到 SortedList。
通过设置 SortedList 中不存在的键的值,Item 属性也可用于添加新元素。例如:myCollection["myNonexistentKey"] = myValue。但是,如果指定的键已经存在于 SortedList 中,则设置 Item 属性将改写旧值。相比之下,Add 方法不修改现有元素。
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
//结果为d c b a,所以可知是按键排序,而非值排序
DropDownList3.DataSource = sList;
DropDownList3.DataTextField = "Key";
DropDownList3.DataValueField = "Value";
DropDownList3.DataBind();
2。public virtual void Remove(object key);
从 SortedList 中移除带有指定键的元素
如果 SortedList 不包含带有指定键的元素,则 SortedList 保持不变。不引发异常
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
//sList.Remove("b"); 错误,是按key删除,而非Value
sList.Remove(3); //删除了[3,"b"]
DropDownList3.DataSource = sList;
DropDownList3.DataTextField = "Key";
DropDownList3.DataValueField = "Value";
DropDownList3.DataBind();
3。public virtual void RemoveAt(int index);
移除 SortedList 的指定索引处的元素。
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
sList.RemoveAt(3); //删除的是[4,"a"],这里的参数是索引号,而非键值,
//与sList.Remove(3)不同; sList.Remove(3)删除了[3,"b"]
DropDownList3.DataSource = sList;
DropDownList3.DataTextField = "Key";
DropDownList3.DataValueField = "Value";
DropDownList3.DataBind();
4。public virtual void Clear();
从 SortedList 中移除所有元素Count 设置为零。Capacity 保持不变。若要重置 SortedList 的容量,请调用 TrimToSize或直接设置 Capacity 属性。截去空 SortedList 会将 SortedList 的容量设置为默认容量,而不是零
二。与索引有关的操作
1。public virtual void SetByIndex(int index,object value);
替换 SortedList 中指定索引处的值。
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
sList.SetByIndex(1,"dddddd"); //1为索引,如果Count<2,则出错,也就是说必须存在
//而sList[2] = "dddddd";不存在这种现象,
//也就是说sList[2] = "dddddd"是
//如果键存在在修改值,不存在则添加
DropDownList3.DataSource = sList;
DropDownList3.DataTextField = "Key";
DropDownList3.DataValueField = "Value";
DropDownList3.DataBind();
2。public virtual object GetByIndex(int index);
获取 SortedList 的指定索引处的值。index必须小于Count,否则出错
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
//sList.Clear();
int nIndex = 2;
if (nIndex<sList.Count)
{
Label3.Text = sList.GetByIndex(nIndex).ToString();
}
else
{
Label3.Text = "nIndex>=Count";
}
3.public virtual int IndexOfKey(object key);
返回 SortedList 中指定键的从索引,这是Hashtable所没有的,因为Hashtable没有有序这个概念,它的排序是内部的
4.public virtual int IndexOfValue(object value);
返回指定的值在 SortedList 中第一个匹配项的索引,这是Hashtable所没有的,因为Hashtable没有有序这个概念,它的排序是内部的
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
sList.Add(5,"d");
int nIndex = 0;
nIndex = sList.IndexOfKey(1); //为0
nIndex = sList.IndexOfValue("d"); //值匹配的有两个,这时返回第一个匹配的,所以为0
三。其他
1.public virtual object GetKey(int index);
获取 SortedList 的指定索引处的键,这也是Hashtable所不可能有的
2.public virtual IList GetKeyList();
获取 SortedList 中的键
SortedList sList = new SortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
sList.Add(5,"d");
Label3.Text = "";
IList iList = sList.GetKeyList();
for (int i=0; i<sList.Count; i++)
{
Label3.Text += iList[i].ToString();
Label3.Text += " ";
}
注:IList 接口,表示可按照索引单独访问的一组对象,其中有一个Item属性,在C#也就就是索引器
3.public virtual IList GetValueList();
获取 SortedList 中的值
4.public virtual bool Contains(object key);
确定 SortedList 是否包含特定键
5.public virtual bool ContainsKey(object key);
确定 SortedList 是否包含特定键,与Contains(object key);完全同
6.public virtual bool ContainsValue(object value);
确定 SortedList 是否包含特定值
上述这三个函数与Hashtable完全相同


猜你喜欢
- 最近准备整理一套关于UI效果的文章,算是对这段时间的一个总结,主要讲Android开发中的UI效果设计模块。初步分为一下几个篇幅:Andro
- java web返回中文乱码ajax返回中文乱码问题 在浏览器按F12查看数据包可以看到charset为 iso-8859-1,这是spri
- 一、案例介绍模拟一个商品的站内搜索系统(类似淘宝的站内搜索);商品详情保存在mysql数据库的product表中,使用mybatis框架;站
- 本文通过实例来介绍如何使用commons-fileupload.jar,Apache的commons-fileupload.jar可方便的实
- 本文实例为大家分享了UnityShader百叶窗展示的具体代码,供大家参考,具体内容如下shader实现以上百叶窗效果,主要通过shader
- 编写Job定时执行任务十分有用,能解决很多问题,这次实习的项目里做了一下系统定时更新三方系统订单状态的功能,这里用到了Spring的定时任务
- 本文实例讲述了Java上传文件进度条的实现方法。分享给大家供大家参考,具体如下:东西很简单,主要用到commons-fileupload,其
- Purpose开发人员在合作的时候经常遇到以下场景:1.开发人员A在自己的本地数据库做了一些表结构的改动,并根据这些改动调整了DAO层的代码
- Mapper类中存在名称相同的方法重载报错项目场景官网项目开发问题描述Mapper类中存在名称相同的方法重载报错为了省事,直接在mapper
- 本文实例讲述了Android编程实现分页加载ListView功能。分享给大家供大家参考,具体如下:package eoe.listview;
- 这篇文章主要介绍了SpringBoot下如何实现支付宝接口的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 1.小程序推送信息列如我们去餐厅等位有预约提醒,剩余桌数首先申请一个小程序,微信开放平台:小程序2.申请小程序信息,申请信息模板appid&
- 1、运算符两边的变量为boolean变量时 先列出代码:public clas
- 如何在listview中插入图片,相信大家很想知道,下面就为大家分享具体步骤:第一步:在窗体中拖入ListView控件和imageList控
- DateTime.Now.ToString("dddd",new System.Globalization.Cultur
- 什么是ApplicationContext?它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。 App
- 面试题1:说说什么分布式事务?解释一下什么是CAP?现在互联网开发多使用微服务架构,一个简单的操作,在服务端可能就是由多个服务和数据库实例协
- 本文实例讲述了Android编程实现webview将网页打包成apk的方法。分享给大家供大家参考,具体如下:功能非常简单,而且乍一看没什么特
- 为了提升编译速度,这几天用上了 AS 3.0 和 Gradle 3.0 插件,不得不说不论是 AS 3.0,还是 Gradle 3.0 都变
- 前言Spring 事务注解 @Transactional 本来可以保证原子性,如果事务内有报错的话,整个事务可以保证回滚,但是加上try c