我的问题是我总是想按照特定的方式对一组对象进行排序。
例如:
我遇到的问题是每次都需要冗长地添加排序顺序。一个简洁的解决方案似乎是创建一个实现
意思是它进行了非常细致的比较。
当前的实现(可能会起作用,尽管我正在编写伪代码)。
例如:
class foo{
public string name {get;set;}
public DateTime date {get;set;}
public int counter {get;set;}
}
...
IEnumerable<foo> dosomething(foo[] bar){
return bar.OrderBy(a=>a.name).ThenBy(a=>a.date).ThenBy(a=>a.counter);
}
我遇到的问题是每次都需要冗长地添加排序顺序。一个简洁的解决方案似乎是创建一个实现
IComparer<foo>
接口的类,这意味着我可以这样做:IEnumerable<foo> dosomething(foo[] bar){
return bar.OrderBy(a=>a, new fooIComparer())
}
问题在于,该实现的排序方法如下:
...
public int Compare(foo x, foo y){ }
意思是它进行了非常细致的比较。
当前的实现(可能会起作用,尽管我正在编写伪代码)。
public int Compare(foo x, foo y){
if (x==y)
return 0;
var order = new []{x,y}.OrderBy(a=>a.name).ThenBy(a=>a.date).ThenBy(a=>a.counter);
return (order[0] == x) ? -1 : -1;//if x is first in array it is less than y, else it is greater
}
这并不是很高效的方法,有没有其他更简洁的解决方案?最好不需要使用Compare(x,y)方法。
SortedSet
,一切都会自动发生(注意:SortedSet
不允许重复项)。 - Jon