如何通过结果函数对List <t>进行排序?

时间:2015-06-02 08:37:53

标签: c# wpf

我想在边缘的某些位置插入边缘的交点,但边缘之前可能有交点。所以我想对Edge.StartEdge.Finish之间的交叉点进行排序(Point)。

要使用parametric T等式进行排序,函数如下所示:

/// <summary>
/// Get the value of T between startPoint and endPoint
/// </summary>
/// <param name="position">The intersection of edge</param>
/// <param name="startPoint">Start point of edge</param>
/// <param name="endPoint">End Point of edge</param>
/// <returns></returns>
public static double calculateT(Point position, Point startPoint, Point endPoint){
    return (position.X - startPoint.X) / (startPoint.X  - endPoint.X);
}

MainWindow.xaml.cs中的某些地方我得到了这个:

//there are some another intesection vertices

Node anotherPointer = new Node(); //pointer

//prev is node that points to start point of edge
//cur is node that points to end point of edge
//nodes is new node that wanted to inserted

//collection of intersection
List<Node> nodes = new List<Node>();


nodes.Add(node); //add the new intersection to the list

//grab all intersection between start point until end point

anotherPointer = prev.Next;
while (anotherPointer != cur) {
    nodes.Add(anotherPointer);
    anotherPointer = anotherPointer.Next;
}

//how to sort nodes?

问题是我需要三个参数来计算交叉点的T。如何按功能nodes排序calculateT

注意

这是我的节点类。

public class Node {
     Point info;
     Node next;
}

2 个答案:

答案 0 :(得分:4)

你试过这个吗?

nodes.OrderBy(node => calculateT(...))

(我不确定你是如何获得calculateT的参数的,但是你明白了这一点。

答案 1 :(得分:2)

List<T>提供了您可以使用的Sort方法。此重载需要Comparison<T>委托作为参数,因此您只需要使用calculateT方法构建此类委托。

nodes.Sort((node1, node2) => calculateT( /* parameters using Node1 */).CompareTo(calculateT( /* parameters using Node2 */);

请注意,如果您希望始终使用此方法对nodes列表进行排序,则可能需要使用SortedList<T>