对列表排序<;int>;在c#中忽略符号

对列表排序<;int>;在c#中忽略符号,c#,C#,我有一个清单如下 var initial=新列表{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);

我有一个清单如下 var initial=新列表{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);
            }
var initial=新列表{2,5,6,-1,-3,-4};
var dummyList=initial.FindAll(x=>x<0);
initial.RemoveAll(x=>dummyList.Contains(x));
foreach(dummyList中的变量e)
{
首字母。添加(e*-1);
}
initial.Sort();
foreach(dummyList中的变量e)
{
var指数=initial.FindIndex(x=>x==(e*-1));
初始移除(索引);
首字母。插入(索引e);
}
有人能给出更好的解决方案吗。
谢谢

您可以将
比较
传递给
排序
方法,然后使用绝对值进行比较:

list.Sort((a, b) => Math.Abs(a).CompareTo(Math.Abs(b)));
或使用Linq:

list = list.OrderBy(x => Math.Abs(x)).ToList();

initial.OrderBy(x=>Math.Abs(x))
?哎呀,它不起作用了:(在
for
中使用
OrderBy
的结果,比如
foreach(initial.OrderBy(x=>Math.Abs(x))中的变量e){
太好了!我假设OrderBy()将结果存储在源变量中。我的错误。