Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 中间的排序列表在中间。_C#_.net_Sorting - Fatal编程技术网

C# 中间的排序列表在中间。

C# 中间的排序列表在中间。,c#,.net,sorting,C#,.net,Sorting,我有一张物品清单 public class foo { public decimal val1 {get;set;} public decimal val2 {get;set;} } Ival1和val2可以包含负值或正值。 如果我有一个列表项是否有一种干净的方法可以对它们进行排序,以便val1或val2中的负值不是列表中的第一项或最后一项 我的列表大小可以从1到100。如果小于3,则不需要排序。但是如果它是=3,我需要确保任何负值都不是列表中的第一个或最后一个。创建您自己的M

我有一张物品清单

public class foo
{
    public decimal val1 {get;set;}
    public decimal val2 {get;set;}
}
I
val1
val2
可以包含负值或正值。 如果我有一个
列表项
是否有一种干净的方法可以对它们进行排序,以便val1或val2中的负值不是列表中的第一项或最后一项


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

创建您自己的
MyList:list
类并重写
添加(…)
插入(…)
删除(…)
和其他适合您需要的方法

或者,您可以使用
decimal
并侦听
CollectionChanged
事件。

如果列表的开头和结尾存在“正值”,则尝试将其推送到列表的开头和结尾:

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);
    }
}

可能吗?它们可能都是负面的。我也很好奇,你能用一个更具描述性的例子来详细说明吗?如果它们都是正面的或是负面的,那么顺序就不重要了。如果比我想的解决方案可读性强得多=)