我有一项任务:
[+]创建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时遇到了麻烦。你能救我吗?
答案 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 数组,而不是修改现有数组。