使用循环从数组创建“n”SubArrays

时间:2014-03-13 08:31:32

标签: c# arrays

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

我尝试过类似的东西,但它没有工作:

(将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++;
}

我需要来自&#34; k&#34;子阵。这是可能的吗?

例如:

如果k = 16,我有:

  

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

我需要4个subArrays:

  

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

5 个答案:

答案 0 :(得分:0)

尝试使用列表:

        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);
        }

答案 1 :(得分:0)

你必须使subArr成为一个数组(或者一个2D数组,最适合你的数组):

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

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

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

然后,您可以使用subArr.Add(newrrat)

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

答案 2 :(得分:0)

首先,使用

轻松创建您的号码范围
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());

答案 3 :(得分:0)

这样的东西?

    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];

答案 4 :(得分:0)

var arrays = Enumerable.Range(1, 16).ToArray()
            .GroupBy(i => (Math.Ceiling(i / (double)4)))
            .Select(g => g.ToArray())
            .ToArray();