创建“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
首先,使用
轻松创建数字范围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();