键/值对的集合SortedList

表示键/值对的集合,这些键和值按键排序并可按照键和索引访问。

SortedList最合适对一列健/值对进行排序,在排序时,是对键进行排序,SortedList是Hashtable和Array的混合。当使用Item索引器属性按照元素的键访问元素时,其行为类似于Hashtable。当使用GetByIndex或SetByIndex按照元素的索引访问元素时,其行为类似于Array。

SortedList在内部维护两个数组以将数组存储到列表中;即,一个数组用于键,另一个数组用于相关联的值。每个元素都是一个可作为DictionaryEntry对象进行访问的键/值对。键不能为空引用(VisualBasic中为Nothing),但值可以。SortedList的容量是列表可拥有的元素数。随着向SortedList中添加元素,容量通过重新分配按需自动增加。可通过调用TrimToSize或通过显式设置Capacity属性减少容量。SortedList的元素将按照特定的IComparer实现(在创建SortedList时指定)或按照键本身提供的IComparable实现并依据键来进行排序。不论在哪种情况下,SortedList都不允许重复键。

索引顺序基于排序顺序。当添加元素时,元素将按正确的排序顺序插入SortedList,同时索引会相应地进行调整。若移除了元素,索引也会相应地进行调整。因此,当在SortedList中添加或移除元素时,特定键/值对的索引可能会更改。

由于要进行排序,所以在SortedList上操作比在Hashtable上操作要慢。但是,SortedList允许通过相关联键或通过索引对值进行访问,可提供更大的灵活性。

一。添加删除

1。publicvirtualvoidAdd(objectkey,objectvalue);

此集合中的索引从零开始。

将带有指定键和值的元素添加到SortedList。

通过设置SortedList中不存在的键的值,Item属性也可用于添加新元素。例如:myCollection["myNonexistentKey"]=myValue。但是,如果指定的键已经存在于SortedList中,则设置Item属性将改写旧值。相比之下,Add方法不修改现有元素。

SortedListsList=newSortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
//结果为dcba,所以可知是按键排序,而非值排序

DropDownList3.DataSource=sList;
DropDownList3.DataTextField="Key";
DropDownList3.DataValueField="Value";
DropDownList3.DataBind();

2。publicvirtualvoidRemove(objectkey);

从SortedList中移除带有指定键的元素
如果SortedList不包含带有指定键的元素,则SortedList保持不变。不引发异常

SortedListsList=newSortedList();
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。publicvirtualvoidRemoveAt(intindex);

移除SortedList的指定索引处的元素。

SortedListsList=newSortedList();
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。publicvirtualvoidClear();

从SortedList中移除所有元素Count设置为零。Capacity保持不变。若要重置SortedList的容量,请调用TrimToSize或直接设置Capacity属性。截去空SortedList会将SortedList的容量设置为默认容量,而不是零

二。与索引有关的操作

1。publicvirtualvoidSetByIndex(intindex,objectvalue);

替换SortedList中指定索引处的值。

SortedListsList=newSortedList();
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。publicvirtualobjectGetByIndex(intindex);

获取SortedList的指定索引处的值。index必须小于Count,否则出错

SortedListsList=newSortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
//sList.Clear();
intnIndex=2;
if(nIndex<sList.Count)
{
Label3.Text=sList.GetByIndex(nIndex).ToString();
}
else
{
Label3.Text="nIndex>=Count";
}

3.publicvirtualintIndexOfKey(objectkey);

返回SortedList中指定键的从索引,这是Hashtable所没有的,因为Hashtable没有有序这个概念,它的排序是内部的

4.publicvirtualintIndexOfValue(objectvalue);

返回指定的值在SortedList中第一个匹配项的索引,这是Hashtable所没有的,因为Hashtable没有有序这个概念,它的排序是内部的

SortedListsList=newSortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
sList.Add(5,"d");
intnIndex=0;
nIndex=sList.IndexOfKey(1);//为0
nIndex=sList.IndexOfValue("d");//值匹配的有两个,这时返回第一个匹配的,所以为0

三。其他

1.publicvirtualobjectGetKey(intindex);

获取SortedList的指定索引处的键,这也是Hashtable所不可能有的

2.publicvirtualIListGetKeyList();

获取SortedList中的键

SortedListsList=newSortedList();
sList.Add(1,"d");
sList.Add(2,"c");
sList.Add(3,"b");
sList.Add(4,"a");
sList.Add(5,"d");
Label3.Text="";
IListiList=sList.GetKeyList();
for(inti=0;i<sList.Count;i++)
{
Label3.Text+=iList[i].ToString();
Label3.Text+="";
}

注:IList接口,表示可按照索引单独访问的一组对象,其中有一个Item属性,在C#也就就是索引器

3.publicvirtualIListGetValueList();

获取SortedList中的值

4.publicvirtualboolContains(objectkey);

确定SortedList是否包含特定键

5.publicvirtualboolContainsKey(objectkey);

确定SortedList是否包含特定键,与Contains(objectkey);完全同

6.publicvirtualboolContainsValue(objectvalue);

确定SortedList是否包含特定值

上述这三个函数与Hashtable完全相同

你可能感兴趣的:(C++,c,C#)