private List nodes = new List();对通用列表进行排序,并允许两个名称始终位于顶部,并按其余排序
ISilverNodeModel类中有一个类型为string的标签字段。
假设节点列表是:
马尔科姆, 符号, 埃里克, Sandrea
我想Malcolm和Sandrea总在最前面和休息进行排序。
我这样做,但它的所有排序:
nodes.Sort((节点,节点2)=> node1.Label 的CompareTo( node2.Label));
private List nodes = new List();对通用列表进行排序,并允许两个名称始终位于顶部,并按其余排序
ISilverNodeModel类中有一个类型为string的标签字段。
假设节点列表是:
马尔科姆, 符号, 埃里克, Sandrea
我想Malcolm和Sandrea总在最前面和休息进行排序。
我这样做,但它的所有排序:
nodes.Sort((节点,节点2)=> node1.Label 的CompareTo( node2.Label));
您可以编写自己的IComparer,并在Sort方法中使用该实现。
然后,您的实施可以确定malcolm和sandra总是比其他任何标签都小。
public class MySorter : IComparer<ISilverNodeModelClass>
{
public int Compare(ISilverNodeModelClass left, ISilverNodeModelClass right)
{
if(left.Label.Equals (right.Label))
return 0;
if(left.Label == "malcolm" || left.Label == "sandra")
return Int32.MinValue;
if(right.Label == "malcolm" || right.Label == "sandra")
return Int32.MaxValue;
return Comparer<string>.Default.Compare (left.Label, right.Label);
}
}
如果你在.NET 3.5中,有一个很好的方式,使用LINQ做到这一点:
List<string> topLabels = new List<string> { "Malcolm", "Sandrea" };
nodes = nodes
.OrderByDescending(node => topLabels.Contains(node.Label))
.ThenBy(node => node.Label)
.ToList();
nodes.Sort((node1, node2) =>
{
if (node1.Label.Equals(node2.Label))
{
return 0;
}
if (node1.Label == "Favorites" || node1.Label == "Recent")
{
return Int32.MinValue;
}
if (node2.Label == "Favorites" || node2.Label == "Recent")
{
return Int32.MaxValue;
}
return node1.Label.CompareTo(node2.Label);
});
好的问题解决: 继üR代码里面。谢谢 – Malcolm 2010-02-04 11:25:23