在C#中对一个List<int>进行排序,忽略正负号。

3

我有一个如下的列表:

var initial = new List { 2, 5, 6,-1, -3, -4 };

期望的输出是 {-1,2,-3,-4,5,6} => (通过忽略负号对给定的列表进行排序,但在结果中不删除它们。)

我的尝试解决这个问题是:

            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 谢谢!


5
initial.OrderBy(x => Math.Abs(x)) - Heretic Monkey
糟糕,它没成功。:( - BetterLateThanNever
https://dotnetfiddle.net/n9YKNY - BetterLateThanNever
使用 OrderBy 的结果在你的 for 中,例如 foreach(var e in initial.OrderBy(x => Math.Abs(x))){ - Heretic Monkey
太好了!我以为OrderBy()会在源变量中存储结果。我的错。 - BetterLateThanNever
1个回答

13
您可以将Comparison传递给Sort方法,然后使用绝对值进行比较:
list.Sort((a, b) => Math.Abs(a).CompareTo(Math.Abs(b)));

或者使用 Linq:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接