【问题标题】:C#: How can I sort rows in 2D array in ascending order based on highest value in one column?C#:如何根据一列中的最大值按升序对二维数组中的行进行排序?
【发布时间】:2021-06-24 03:03:54
【问题描述】:

所以我有一个二维数组中的数据表(第一列是行的序数,其余的是我正在使用的数据)。我的问题基本上是如何根据最后一列中的最高值对行进行排序(即,如果第四行在最后一列中获得最高值,它会向上移动到第一行,依此类推)。代码中的random只是我为在x和y之间生成浮点数的一种方法。

到目前为止,我的代码如下所示:

static float random(float min, float max)
        {
            System.Random random = new System.Random();
            double val = (random.NextDouble() * (max - min) + min);
            return (float)val;
        }
static void Main(string[] args)
        {

            int temp = 0, i, j;
            float[,] matrix;
            matrix = new float[10, 5];
            
            //generating ordinal number
            for (i = 0; i < 10; i++)
            {
                matrix[i, 0] = ++temp;
            }
            //generating rest of the 2D array
            for (i = 0; i < 10; i++)
            {
                for (j = 0; j < 5; j++)
                {
                    matrix[i, 1] = random(60, 100);
                    matrix[i, 2] = random(50, 100);
                    matrix[i, 3] = random(40, 100);
                    matrix[i, 4] = (matrix[i, 1] + matrix[i, 2] + matrix[i, 3]) / 3;
                }
            }
            
            for (i = 0; i < 10; i++)
            {
                for (j = 0; j < 5; j++)
                {
                    Console.Write(matrix[i, j] + "\t");
                }
                Console.WriteLine();
            }
            Console.WriteLine();

        }

【问题讨论】:

    标签: c# arrays sorting multidimensional-array


    【解决方案1】:

    我建议使用 jagged 数组(数组的数组)float[][] 而不是 2d 一个 float[,]。 使用锯齿状数组,您可以在一行中进行排序:

        using System.Linq;
    
        ...
    
        float[][] matrix = ...
    
        // Column to compare
        int column = 4; // or matrix[0].Length - 1; for the last olumn
    
        Array.Sort(matrix, (left, right) => left[column].CompareTo(right[column]))); 
    

    如果你坚持要float[,],你可以将它复制到锯齿状数组中,排序然后复制回来:

        float[,] matrix = ...
    
        int column = 4;
    
        float[][] temp = Enumerable
          .Range(0, matrix.GetLength(0))
          .Select(i => Enumerable
             .Range(0, matrix.GetLength(1))
             .Select(j => matrix[i, j])
             .ToArray())
          .ToArray(); 
    
        Array.Sort(temp, (left, right) => left[column].CompareTo(right[column])); 
    
        for (int i = 0; i < temp.Length; ++i)
          for (int j = 0; j < temp[i].Length; ++j)
            matrix[i, j] = temp[i][j];
    

    【讨论】:

      猜你喜欢
      • 2021-04-18
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多