【问题标题】:Random 2-D array with LINQ c#使用 LINQ c# 的随机二维数组
【发布时间】:2014-11-13 06:58:05
【问题描述】:

如何使用 LINQ 创建和显示随机整数二维数组? 请帮帮我! 我创建随机二维数组,但不是使用 LINQ。

Random rnd = new Random();

int[,] matrix = new int[rows, columns];
for (int i = 0; i < matrix.GetLength(0); i++)
    for (int j = 0; j < matrix.GetLength(1); j++)
        matrix[i, j] = rnd.Next(-100,100);
Console.WriteLine("Array:");
for (int i = 0; i < matrix.GetLength(0); i++)
{
    for (int j = 0; j < matrix.GetLength(1); j++)
        Console.Write("{0}\t", matrix[i, j]);
    Console.WriteLine();
}

【问题讨论】:

  • LINQ 很可能会导致代码的性能和可读性降低。它一般不能很好地处理多维数组。
  • 与 LINQ 一样出色的技术,有时不需要它,有时它不仅不需要,而且会使您的代码过于复杂,而不是简化它。这是后者的一个例子。

标签: c# linq


【解决方案1】:

如果你真的想过于复杂:

    static void Main(string[] args)
    {
        int rows = 10;
        int columns = 10;
        int[,] matrix = new int[rows, columns];
        Random rnd = new Random();

        Enumerable.Range(0, rows)
            .ToList()
            .ForEach(row => Enumerable.Range(0, columns)
                .ToList()
                .ForEach(column => 
                    {
                        matrix[row, column] = rnd.Next(-100, 100);
                        Console.Write(column == columns ? Environment.NewLine + matrix[row, column].ToString() + "\t" : matrix[row, column].ToString() + "\t");
                    }));

        Console.ReadKey();
    }

【讨论】:

    【解决方案2】:

    使用 linq 创建 10x10 数组:

       var r = new Random();
       var result = Enumerable.Range(0, 10).Select(x => 
                       Enumerable.Range(0, 10).Select(y => r.Next()).ToArray())
                   .ToArray();
    

    【讨论】:

    • 我认为它返回锯齿状数组而不是二维数组
    • 很多人搜索过一种将锯齿状数组转换为二维数组的 linq 方法,但没有找到。通常他们是通过 for 循环来完成的。 stackoverflow.com/questions/9774901/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2012-08-21
    • 1970-01-01
    • 2020-06-14
    • 2012-07-27
    • 2017-10-07
    • 2015-06-29
    相关资源
    最近更新 更多