net*_*jor 5 c# list comparator
我有一个List,其中元素是:
struct element {
double priority;
int value;
}
Run Code Online (Sandbox Code Playgroud)
如何实现我自己的比较器,允许我按优先级排序List?我尝试使用SortredList ...但它不允许douplicated键:(
非常感谢您的帮助!
Joe*_*orn 10
假设C#3或更高版本:
var sorted = MyList.OrderBy(e => e.priority);
Run Code Online (Sandbox Code Playgroud)
您可以使用带有委托的Sort重载来执行就地排序Comparison<T>:
yourList.Sort((x, y) => x.priority.CompareTo(y.priority));
Run Code Online (Sandbox Code Playgroud)
对于旧版本的C#,您需要将lambda替换为old-school delegate语法:
yourList.Sort(
delegate(element x, element y) { return x.priority.CompareTo(y.priority); });
Run Code Online (Sandbox Code Playgroud)
如果您不能依赖 C# 3 扩展或 Lambda,那么您可以让您的结构实现IComparable接口,如下所示:
struct element : IComparable
{
double priority;
int value;
public element(int val, double prio)
{
priority = prio;
value = val;
}
#region IComparable Members
public int CompareTo(object obj)
{
// throws exception if type is wrong
element other = (element)obj;
return priority.CompareTo(other.priority);
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
该接口也有类型安全版本,但原理是一样的
在结构或类上实现该接口后,调用Sort方法List<>将“正常工作”
static void Main(string[] args)
{
Random r = new Random();
List<element> myList = new List<element>();
for (int i = 0; i < 10; i++)
myList.Add(new element(r.Next(), r.NextDouble()));
// List is now unsorted
myList.Sort();
// List is now sorted by priority
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4053 次 |
| 最近记录: |