如何创建没有循环的矩阵
How to create a matrix without a loop
我想知道是否可以在不编写任何循环的情况下创建矩阵。我尝试从一个简单的范围列表开始,但我不知道如何进一步。
Enumerable.Range(1, 4).ToList()
这里有 3 个循环的代码:
private static int[][] calculPossibleCombinaison(){
int l;
for (int i = 1; i < 5; i++) {
for (int j = 1; j < 5; j++) {
for (int k = 1; k < 5; k++) {
l = (i*j*k)-1;
combinaison[l][0] = i;
combinaison[l][1] = j;
combinaison[l][2] = k;
console.writeline("["+combinaison[l][0]+","+combinaison[l][1]+","+combinaison[l][2]+"]");
}
}
}
return combinaison;
}
这是我矩阵的结果
[1,1,1]
[1,1,2]
[1,1,3]
[1,2,1]
[1,2,2]
[1,2,3]
[1,3,1]
[1,3,2]
[1,3,3]
[2,1,1]
[2,1,2]
[2,1,3]
[2,2,1]
[2,2,2]
[2,2,3]
[2,3,1]
[2,3,2]
[2,3,3]
[3,1,1]
[3,1,2]
[3,1,3]
[3,2,1]
[3,2,2]
[3,2,3]
[3,3,1]
[3,3,2]
[3,3,3]
你觉得可能吗?
非常感谢
您可以使用 LINQ 代替 for 循环,但您仍然可以摆脱循环。使用 Linq 很酷,但它内部有循环植入。就好像你把那些 for 循环放在一个函数中然后调用它一样。
没有循环是不行的。
Enumerable.Range(1, 4).ToList().ForEach(i=>{
Enumerable.Range(1, 4).ToList().ForEach(j=>{
Enumerable.Range(1, 4).ToList().ForEach(k=>{
l = (i*j*k)-1;
combinaison[l][0] = i;
combinaison[l][1] = j;
combinaison[l][2] = k;
});
});
});
递归:
int i=0,j=0,k=0;
public void MakeMartix(){
if(i>3){i=0;j++;}
if(j>3){j=0;k++;}
if(k>4)return;
l = (i*j*k)-1;
combinaison[l][0] = i;
combinaison[l][1] = j;
combinaison[l][2] = k;
i++;
MakeMatirx();
}
试试这个
Enumerable.Range(1, 3)
.SelectMany(x => Enumerable.Range(1, 3), (x, y) => new[] {x, y})
.SelectMany(x => Enumerable.Range(1, 3), (x, y) => new[] {x[0], x[1], y}).ToArray();
我想知道是否可以在不编写任何循环的情况下创建矩阵。我尝试从一个简单的范围列表开始,但我不知道如何进一步。
Enumerable.Range(1, 4).ToList()
这里有 3 个循环的代码:
private static int[][] calculPossibleCombinaison(){
int l;
for (int i = 1; i < 5; i++) {
for (int j = 1; j < 5; j++) {
for (int k = 1; k < 5; k++) {
l = (i*j*k)-1;
combinaison[l][0] = i;
combinaison[l][1] = j;
combinaison[l][2] = k;
console.writeline("["+combinaison[l][0]+","+combinaison[l][1]+","+combinaison[l][2]+"]");
}
}
}
return combinaison;
}
这是我矩阵的结果
[1,1,1] [1,1,2] [1,1,3] [1,2,1] [1,2,2] [1,2,3] [1,3,1] [1,3,2] [1,3,3] [2,1,1] [2,1,2] [2,1,3] [2,2,1] [2,2,2] [2,2,3] [2,3,1] [2,3,2] [2,3,3] [3,1,1] [3,1,2] [3,1,3] [3,2,1] [3,2,2] [3,2,3] [3,3,1] [3,3,2] [3,3,3]
你觉得可能吗?
非常感谢
您可以使用 LINQ 代替 for 循环,但您仍然可以摆脱循环。使用 Linq 很酷,但它内部有循环植入。就好像你把那些 for 循环放在一个函数中然后调用它一样。 没有循环是不行的。
Enumerable.Range(1, 4).ToList().ForEach(i=>{
Enumerable.Range(1, 4).ToList().ForEach(j=>{
Enumerable.Range(1, 4).ToList().ForEach(k=>{
l = (i*j*k)-1;
combinaison[l][0] = i;
combinaison[l][1] = j;
combinaison[l][2] = k;
});
});
});
递归:
int i=0,j=0,k=0;
public void MakeMartix(){
if(i>3){i=0;j++;}
if(j>3){j=0;k++;}
if(k>4)return;
l = (i*j*k)-1;
combinaison[l][0] = i;
combinaison[l][1] = j;
combinaison[l][2] = k;
i++;
MakeMatirx();
}
试试这个
Enumerable.Range(1, 3)
.SelectMany(x => Enumerable.Range(1, 3), (x, y) => new[] {x, y})
.SelectMany(x => Enumerable.Range(1, 3), (x, y) => new[] {x[0], x[1], y}).ToArray();