Lea*_*ner 12 c# generic-list .net-2.0 data-structures
我有一组元素/键,我正在从两个不同的配置文件中读取.因此,键可以是相同的,但具有与它们中的每一个相关联的不同值.
我想按排序顺序列出它们.我能做什么 ?我尝试了SortedList类,但它不允许重复键.
我该怎么做?
例如,假设我有3个元素,键1,2,3.然后我得到一个具有键2(但值不同)的元素.然后我希望新密钥在现有密钥2之后但在3之前插入.如果我在找到一个带有密钥2的元素,那么它应该在最近添加的密钥2之后.
请注意,我使用的是.NET 2.0
Dav*_*kle 12
我更喜欢使用LINQ来做这类事情:
using System.Linq;
...
var mySortedList = myList.Orderby(l => l.Key)
.ThenBy(l => l.Value);
foreach (var sortedItem in mySortedList) {
//You'd see each item in the order you specified in the loop here.
}
Run Code Online (Sandbox Code Playgroud)
注意:您必须使用.NET 3.5或更高版本才能完成此操作.
你需要的是一个带有自定义IComparer的Sort函数.你现在拥有的是使用sort时的默认icomparer.这将检查字段值.
创建自定义IComparer时(通过实现Icomparable接口在您的类中执行此操作).它的作用是:你的对象将自己检查到你排序的列表中的每个其他对象.
这是由一个函数完成的.(不要担心VS会在引用你的界面时实现它
public class ThisObjectCLass : IComparable{
public int CompareTo(object obj) {
ThisObjectCLass something = obj as ThisObjectCLass ;
if (something!= null)
if(this.key.CompareTo(object.key) == 0){
//then:
if .....
}
else if(this.value "is more important then(use some logic here)" something.value){
return 1
}
else return -1
else
throw new ArgumentException("I am a dumb little rabid, trying to compare different base classes");
}
}
Run Code Online (Sandbox Code Playgroud)
阅读上面的链接以获取更多信息.
我知道在开始的时候我自己有些麻烦,所以对于任何额外的帮助添加评论我会详细说明
我是通过创建一个来完成的SortedList<int, List<string>>.每当我找到重复键时,我只需将值插入与SortedList对象中已存在的键相关联的现有列表中.这样,我可以获得特定键的值列表.
使用你自己的比较者课程! 如果排序列表中的键是整数,则可以使用例如此比较器:
public class DegreeComparer : IComparer<int>
{
#region IComparer<int> Members
public int Compare(int x, int y)
{
if (x < y)
return -1;
else
return 1;
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
要使用int键和字符串值实现新的SortedList,请使用:
var mySortedList = new SortedList<int, string>(new DegreeComparer());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16885 次 |
| 最近记录: |