我想问一下如何从一个带循环的数组中创建一个子数组。
我尝试过类似的东西,但它没有工作:
(将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
答案 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();