c# - 多维数组列排序

标签 c# arrays sorting

假设我创建此代码以生成第 idv 个随机数。但是我很难根据最后一列对数组进行排序。

假设单个尺寸是 [idv, width] = [8,6] 我想对第 6 列的所有行进行排序...我想在排序后获取数组中的第 4 个列表。我怎样才能将这种情况实现到代码中?

public static void population(double[,] individual, int width, int idv, Random rnd)
    {
        for (int i = 0; i < idv; i++)
        {
            Console.Write("individual {0} :\t", i+1);
            for (int j = 0; j < width; j++)
            {
                individual[i, j] = Math.Round(rnd.NextDouble() * 10, 2);
                Console.Write("{0} ", individual[i, j]);
            }
            Console.WriteLine("\n");
        }
    }

谢谢

最佳答案

我建议你使用交错数组 double[][] 而不是2d double[,] .锯齿状数组只是一个数组的数组,您通常可以借助 Linq 轻松地对其进行排序、过滤等:

  double[][] individual = new double[][] {
    new double[] {81, 82, 83, 84, 85, 86},
    new double[] {11, 12, 13, 14, 15, 16},
    new double[] {41, 42, 43, 44, 45, 46},
    new double[] {31, 32, 33, 34, 35, 36},
    new double[] {51, 52, 53, 54, 55, 56},
    new double[] {21, 22, 23, 24, 25, 26},
    new double[] {61, 62, 63, 64, 65, 66},
    new double[] {71, 72, 73, 74, 75, 76},
  };

  double[][] fragment = individual
    .OrderBy(line => line[line.GetUpperBound(0)]) // by last column
    .Take(4) 
    .ToArray();

再来一个Linq来测试结果:

  String test = String.Join(Environment.NewLine, fragment
    .Select(line => String.Join("\t", line)));

  Console.Write(test);

结果是

11  12  13  14  15  16
21  22  23  24  25  26
31  32  33  34  35  36
41  42  43  44  45  46

关于c# - 多维数组列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30370092/

相关文章:

c# - 在 static void 中声明数据库连接 - 连接池会持续存在吗?

c# - 平台调用 #define 指令

c - 有什么方法可以使用 memcpy() 将值复制到特定的字符串位置?

python - 使用 get 与 get() 在 NLTK 中对 FreqDist 进行排序

javascript - 需要帮助对特定索引中的混合字符串和整数的嵌套数组进行排序

c# - 使用 Google Maps API 的应用程序

c# - 如何在 LINQ 中对单个连接中的多个字段进行左连接

php - 如何在 php mysql 中将搜索选项中的数据分配为 json 格式

arrays - 求值,放入数组,求数组VBA中的最小值

Python PyGTK ListView 排序