创建“n"带有循环的数组中的子数组

本文关键字:数组 循环 quot 创建 | 更新日期: 2023-09-27 17:50:12

我想问如何从一个循环数组创建子数组。

我试过这样做,但它不起作用:

(转换int[]int的问题)

int[] numere = new int[k];
int i, j;
for (i = 0; i < k; i++)
{
    numere[i] = i + 1;
}
string output = string.Join("   ", numere);
label1.Text = output;`
double t = Math.Sqrt(k);
int b = (int)t;
int[] subArr = new int[b];
for (j=0; j < b; j++)
{
    var newrrat = numere.Skip(b).Take(b).ToArray();
    subArr[j] = newrrat; 
    j++;
}

我需要k个子数组中的根号。这可能吗?

例如:

如果k=16,我有:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12、13、14、15、16

我需要4个子数组:

1、2、3、4
5、6、7、8
9、10、11、12
13、14、15、16

创建“n"带有循环的数组中的子数组

首先,使用

轻松创建数字范围
var nums = Enumerable.Range(1, 16).ToList();

,然后用它来得到你的子范围

var subs = new List<int[]>();
for (int j = 0; j < k; j += b)
    subs.Add(nums.Take(b).ToArray());

尝试用列表代替:

        int k = 16;
        int[] numere = new int[k];
        int i, j;
        for (i = 0; i < k; i++)
        {
            numere[i] = i + 1;
        }
        double t = Math.Sqrt(k);
        int b = (int) t;
        List<int[]> subArr = new List<int[]>();
        for (j = 0; j < k; j+=b)
        {
            int[] newrrat = numere.Skip(j).Take(b).ToArray();
            subArr.Add(newrrat);
        }

您必须使subArr成为数组的数组(或2D数组,无论您最适合):

int[][] subArr = new int[b][];

这有点难以阅读,所以我倾向于使用自定义类型或List来代替:

var subArr = new List<int[]>(b);

你可以使用subArr.Add(newrrat)

你的代码也有一个错误——你只会跳过b数字,而你可能想跳过b * j

像这样?

    int i, j;
    int k = 16;
    int[] numere = new int[k];
    int b = (int)Math.Sqrt(k);
    for (i = 0; i < k; i++) 
        numere[i] = i + 1;
    int[,] subArr = new int[b,b];
    for( i = 0; i < b; i++) 
        for( j = 0; j < b; j++) 
            subArr[i,j] = numere[(i * b) + j];
var arrays = Enumerable.Range(1, 16).ToArray()
            .GroupBy(i => (Math.Ceiling(i / (double)4)))
            .Select(g => g.ToArray())
            .ToArray();