使用Linq将二维数组除以2,然后打印出来

时间:2014-08-06 12:22:53

标签: c# arrays linq

我有一项任务:

[+]创建4x4数组,用随机int值填充,从min到max对每列进行排序,打印此数组。
[+]创建一个方法,将此数组作为传入参数,并将其中每个成员加倍,并将其打印出来 [ - ]创建一个方法,将此数组作为传入参数,并将其除以2.使用linq进行此操作,然后打印结果数组。

using System;
using System.Linq;

class Example
{
    static void Main()
    {
        Random random = new Random();

        int n = 4;
        int[][] arr = new int[4][];
        for (int i = 0; i < n; i++)
            arr[i] = new int[4];

        for (int i = 0; i < 4; i++)
            for (int j = 0; j < 4; j++)
                arr[i][j] = random.Next(0, 19);

        Console.WriteLine("Generated array: ");

        PrintArr(arr);

        foreach (int[] mas in arr)
            Array.Sort(mas);

        Console.WriteLine("\nSorted array: ");

        PrintArr(arr);

        DoubleIt(arr);

        DivideIt(arr);
    }

    static void PrintArr(int[][] array)
    {
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
                Console.Write("{0,4}", array[i][j]);
            Console.WriteLine();
        }
    }

    static void DoubleIt(int[][] incoming_arr)
    {
        Console.WriteLine("\nDoubled array:");
        for (int i = 0; i < 4; i++)
        {
            for (int j = 0; j < 4; j++)
            {
                incoming_arr[i][j] *= 2;
                Console.Write("{0,4}", incoming_arr[i][j]);
            }
            Console.WriteLine();
        }
    }

    static void DivideIt(int[][] incoming_arr)
    {
        Console.WriteLine("\nHere will be division by 2.");
        var DividingArr = from arr in incoming_arr
                         select arr;
    }
}

我在使用带有二维数组的linq时遇到了麻烦。你能救我吗?

1 个答案:

答案 0 :(得分:0)

有两种数组:多维数组(其中单个数组可以有多个维度)和一维数组(其中数组具有单个维度)。

由于LINQ仅适用于一维数组,因此必须将二维数组建模为一维数组,其元素为一维数组。因此,您需要int[4,4]而不是int[4][4]

我建议您创建一个包含4列的数组,其中每列是4行的数组。这样可以更轻松地对列进行单独排序。

以下是如何使用LINQ创建数组的数组:

var rand = new Random();
var array = (from col in Enumerable.Range(0, 4)
             select (from row in Enumerable.Range(0, 4)
                     select rand.Next()).ToArray()).ToArray();

以下是如何使用LINQ对数组的每个元素进行操作(在这种情况下除以2):

var half = (from col in array
            select (from row in col
                    select row / 2).ToArray()).ToArray();

请注意,这会创建一个 new 数组,而不是修改现有数组。