【问题标题】:Sorting a List<int>排序列表<int>
【发布时间】:2011-04-13 21:51:07
【问题描述】:

使用 C# 对列表进行数字排序的最佳方法是什么? 我的清单有 5、7、3 项,我希望它们按 3、5、7 排序。我知道一些更长的方法,但我想 linq 有更快的方法?

对不起,这是一天的结束,我的想法在其他地方工作,第一次没有看到它改变:(

【问题讨论】:

标签: c# linq list


【解决方案1】:

这里不需要LINQ,只需调用Sort:

list.Sort();

示例代码:

List<int> list = new List<int> { 5, 7, 3 };
list.Sort();
foreach (int x in list)
{
    Console.WriteLine(x);
}

结果:

3
5
7

【讨论】:

  • 抱歉一天结束,我在排序之前正在查看它:(我想是家庭时间
  • 我找不到任何文件说它按升序排序,我只是偏执地说我们不能假设它总是按升序排列吗?谁知道也许 20 年后人们总是会认为下降更有意义,而这个假设将成为新的 y2k
  • 很好的解决方案,但不好的是 Sort() 是返回类型 void - 因此不可链接...改用@Will 的答案。
【解决方案2】:
var values = new int[] {5,7,3};
var sortedValues = values.OrderBy(v => v).ToList();   // result 3,5,7

【讨论】:

    【解决方案3】:

    对整数列表进行降序排序

    class Program
        {       
            private class SortIntDescending : IComparer<int>
            {
                int IComparer<int>.Compare(int a, int b) //implement Compare
                {              
                    if (a > b)
                        return -1; //normally greater than = 1
                    if (a < b)
                        return 1; // normally smaller than = -1
                    else
                        return 0; // equal
                }
            }
    
            static List<int> intlist = new List<int>(); // make a list
    
            static void Main(string[] args)
            {
                intlist.Add(5); //fill the list with 5 ints
                intlist.Add(3);
                intlist.Add(5);
                intlist.Add(15);
                intlist.Add(7);
    
                Console.WriteLine("Unsorted list :");
                Printlist(intlist);
    
                Console.WriteLine();
                // intlist.Sort(); uses the default Comparer, which is ascending
                intlist.Sort(new SortIntDescending()); //sort descending
    
                Console.WriteLine("Sorted descending list :");
                Printlist(intlist);
    
                Console.ReadKey(); //wait for keydown
            }
    
            static void Printlist(List<int> L)
            {
                foreach (int i in L) //print on the console
                {
                    Console.WriteLine(i);
                }
            }
        }
    

    【讨论】:

    • 自定义比较器的杰出示例!
    【解决方案4】:

    保持简单是关键。

    试试下面。

    var values = new int[5,7,3];
    values = values.OrderBy(p => p).ToList();
    

    【讨论】:

      【解决方案5】:
      List<int> list = new List<int> { 5, 7, 3 };  
      list.Sort((x,y)=> y.CompareTo(x));  
      list.ForEach(action => { Console.Write(action + " "); });
      

      【讨论】:

        【解决方案6】:
        double jhon = 3;
        double[] numbers = new double[3];
        for (int i = 0; i < 3; i++)
        
        {
            numbers[i] = double.Parse(Console.ReadLine());
        
        }
        Console.WriteLine("\n");
        
        Array.Sort(numbers);
        
        for (int i = 0; i < 3; i++)
        {
            Console.WriteLine(numbers[i]);
        
        }
        
        Console.ReadLine();
        

        【讨论】:

        • 解释一下为什么这应该解决 OP 的问题会很有帮助。
        • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
        【解决方案7】:

        int 降序排序列表,您可以先排序并反转

        class Program
        {
            static void Main(string[] args)
            {
        
                List<int> myList = new List<int>();
        
                myList.Add(38);
                myList.Add(34);
                myList.Add(35);
                myList.Add(36);
                myList.Add(37);
        
        
                myList.Sort();
                myList.Reverse();
                myList.ForEach(Console.WriteLine);
        
        
            }
        
        
        
        }
        

        【讨论】:

        • 对 int 降序排序列表,您可以先排序并反向
        • 如果您要解释您的答案是什么/做什么以及它如何帮助解决他们的问题,这将对 OP 有所帮助。将您的评论附加到您的帖子中。
        猜你喜欢
        • 2012-03-09
        • 2012-12-08
        • 2013-01-10
        • 1970-01-01
        • 2014-05-25
        • 1970-01-01
        • 2022-11-17
        • 1970-01-01
        • 2022-01-18
        相关资源
        最近更新 更多