如何解决C#排序列表按键组获取元素
build
KeyComparer看起来像这样:
public class Plates : IEnumerable<keyvaluePair<string,Plate>> {
private SortedList<string,Plate> sortedplates;
public Plates() {
sortedplates = new SortedList<string,Plate>(new KeyComparer());
}
...some additiona data such getters and setters
}
已排序列表的键如下所示(不带括号)。索引用于跟踪对象组。
//Left part of comparer is bigger result is 1,right -1,equal 0
class KeyComparer : IComparer<string> {
public int Compare(string x,string y) {
//Split string into numbers
var xs = x.Split(';');
var ys = y.Split(';');
//Take the smallest array
int min = Math.Min(xs.Length,ys.Length);
//Iterate the smallest amount of elements
for (int i = 0; i < min; i++) {
//Cast to integers
int a = Convert.ToInt32(xs[i]);
int b = Convert.ToInt32(ys[i]);
//Compare
//int cmp = xs[i].Compareto(ys[i]);
int cmp = a.Compareto(b);
//If values are not the same return
if (cmp != 0)
return cmp;
}
//Elsewise give priority to the smallest one
return xs.Length.Compareto(ys.Length);
}
我的问题是如何有效地按索引获取一组对象。例如,我想检索所有具有第一个索引为0的键和另一个索引以2开始的组的对象。 首先想到我可以创建一个哈希集,然后在将对象插入字典中时对对象进行分组,但是我真的不认为这是有效的:
[0;0]
[0;0;0]
[0;1]
[0;1;1;0;0]
[0;2]
[0;8;1;0;0]
[0;9;1;0;0]
[0;10]
[0;10;1;0;0]
[1;0]
[1;1]
[2;1]
[2;10]
[3;1]
[3;1;2]
[3;1;4]
有什么方法可以直接访问组而不循环? 我是否需要添加其他属性来跟踪组? 我觉得这种双循环对于大量对象而言效率不高。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。