在c#中对List <int>进行排序,忽略该符号

Red*_*ddy 3 c#

我有一个列表如下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);
            }
Run Code Online (Sandbox Code Playgroud)

有人可以为此提供更好的解决方案. https://dotnetfiddle.net/gcd1I1 谢谢!

Art*_*aca 13

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

list.Sort((a, b) => Math.Abs(a).CompareTo(Math.Abs(b)));
Run Code Online (Sandbox Code Playgroud)

或者使用Linq:

list = list.OrderBy(x => Math.Abs(x)).ToList();
Run Code Online (Sandbox Code Playgroud)