mar*_*wer 16 objective-c switch-statement
我想知道:有没有办法让Objective-C支持多变量switch构造?
我的意思是,我经常需要处理解决方案依赖于一对变量而不是一对变量的问题.对于一长串单变量值,可以使用一个简单的switch/case构造:
switch (var) {
case 0: ...
case 1: ...
default: ...
}
Run Code Online (Sandbox Code Playgroud)
但是当你必须处理两个值的组合时,你经常碰巧做这样的事情:
switch (var1) {
case 0:
switch (var2) {
case 0: ...
case 1: ...
}
case 1:
switch (var2) {
case 0: ...
case 1: ...
}
...
}
Run Code Online (Sandbox Code Playgroud)
它变得越来越复杂......我真正喜欢做的是这样的事情:
switch (var1, var2) {
case (0,0) : ...
case (1,0) : ...
case (*,1) : ...
default: ...
}
Run Code Online (Sandbox Code Playgroud)
这将导致更简单和可读的结构.有没有解决方案来支持这样的结构?或者这个略有变化?
Int*_*tss 10
我喜欢saphrosit的答案,但我会尽量让它易于理解.
想象一下你的问题的可能结果是网格中的正方形,其中网格边缘的一个边表示var1的值,而另一个边表示var2的可能值,那么如果你逐渐计算出网格的正方形你它能得到这样的东西吗?
|| var1 |
|| 0 | 1 | 2 | ... | j | ... | n-1 |
======++=====================================================================|
0 || 0 | 1 | 2 | ... | j | ... | n-1 |
---||---------+-----------+-----------+-----+-----------+-----+-----------|
1 || n | n+1 | n+2 | ... | n+j | ... | n+(n-1) |
---||---------+-----------+-----------+-----+-----------+-----+-----------|
2 || 2*n | 2*n+1 | 2*n+2 | ... | 2*n+j | ... | 2*n+(n-1) |
v ---||---------+-----------+-----------+-----+-----------+-----+-----------|
a || . | . | . | | . | | . |
r ---||---------+-----------+-----------+-----+-----------+-----+-----------|
2 i || i*n | i*n+1 | i*n+2 | ... | i*n+j | ... | i*n+(n-1) |
---||---------+-----------+-----------+-----+-----------+-----+-----------|
|| . | . | . | | . | | . |
----||---------+-----------+-----------+-----+-----------+-----+-----------|
m-1 || (m-1)*n | (m-1)*n+1 | (m-1)*n+2 | ... | (m-1)*n+j | ... | mn-1 | <-- (m-1)*n+(n-1) = m*n-n + (n-1) = mn-1
------||---------+-----------+-----------+-----+-----------+-----+-----------|
Run Code Online (Sandbox Code Playgroud)
这将被称为行主矩阵,因为您首先计算行数.还有一个列主矩阵,您首先开始倒数而不是开始倒数.这就是矩阵存储在C BLAS库中的方式,因此它应该与许多人非常相似.
在你的情况下,你正在寻找的结果可以解决,因为var3 = var2*n + var1你可以在代码中列出
#define N 10 // Maximum size of var1
int main() {
int var1 = 1;
int var2 = 1;
switch(var1 + var2 * N){
case 1 + 1 * N: printf("One One"); break;
case 2 + 2 * N: printf("Two Two"); break;
default:
printf("Bada Bing");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
注意:之前的代码不起作用,这是有效的.