我有一个列表如下 var initial = new List {2,5,6,-1,-3,-4};
预期输出为{-1,2,-3,-4,5,6} =>(通过忽略-ve符号对给定列表进行排序,但不在结果中删除它们。)
我尝试解决这个问题是
var initial = new List<string> { 2, 5, 6,-1, -3, -4 };
var dummyList = initial.FindAll(x => x < 0);
initial .RemoveAll(x => dummyList.Contains(x));
foreach (var e in dummyList)
{
initial .Add(e * -1);
}
initial.Sort();
foreach (var e in dummyList)
{
var index = initial.FindIndex(x=>x==(e*-1));
initial.RemoveAt(index);
initial.Insert(index, e);
}
有人可以为此提供更好的解决方案。 https://dotnetfiddle.net/gcd1I1 谢谢!
答案 0 :(得分:13)
您可以将Comparison
传递给Sort
方法,然后使用绝对值进行比较:
list.Sort((a, b) => Math.Abs(a).CompareTo(Math.Abs(b)));
或使用Linq:
list = list.OrderBy(x => Math.Abs(x)).ToList();