负面的排序列表位于中间

时间:2012-07-31 05:15:33

标签: c# .net sorting

我有一个对象列表

public class foo
{
    public decimal val1 {get;set;}
    public decimal val2 {get;set;}
}

val1val2可以包含负值或正值。 如果我有一个List<foo>items,那么我可以对它们进行排序,以便val1或val2中的负值不是列表中的第一个或最后一个项目。

我的列表大小可以从1到100.如果它小于3我不需要排序。但如果是>= 3,我需要确保任何负值不在列表的第一位或最后一位。

2 个答案:

答案 0 :(得分:1)

创建您自己的MyList:List<decimal>课程并覆盖Add(..)Insert(...)Remove(..)以及其他方法以满足您的需求。

或者您可以使用decimal的{​​{3}}并听取CollectionChanged事件。

答案 1 :(得分:1)

如果存在,您会尝试将“正”值推送到列表的头部和尾部:

if (myList.Count > 2)
{
    //push a positive to the head of the list
    var firstPositive = myList.FirstOrDefault(x => x.val1 > 0 && x.val2 > 0);
    if (firstPositive != null)
    {
        myList.Remove(firstPositive);
        myList.Insert(0, firstPositive);
    }

    //push a positive to the tail of the list
    var secondPositive = myList.Skip(1).FirstOrDefault(x => x.val1 > 0 && x.val2 > 0);
    if (secondPositive != null)
    {
        myList.Remove(secondPositive);
        myList.Add(secondPositive);
    }
}