有这个循环语句
Ext.define('Admin.overrides.Date', {
override :'Ext.form.field.Date',
dateFormat: 'Y-m-d H:i:s',
dateReadFormat:'Y-m-d H:i:s',
dateWriteFormat : 'Y-m-d H:i:s'
});
我希望这种语法更优雅:
for (i = 0; i < 10; i++) {
if ((i == 4) || (i == 5) || (i == 7) || (i == 9))
continue;
/*some code */
}
答案 0 :(得分:4)
你可以迭代你想要的索引,有点麻烦,但至少可能使它更明确:
const int indices[] = { 0, 1, 2, 3, 6, 8 };
for(size_t j = 0; j < sizeof indices / sizeof *indices; ++j)
{
const int i = indices[j];
// Rest of your loop body here, i iterates over desired values.
}
这也删除了条件。当然,在这一点上很难说出表现。那些测试也不是免费的。
答案 1 :(得分:3)
我不知道优雅的确切含义,但更简洁,更易于维护的方法是使用 fall-through switch-case
,例如< / p>
for (i = 0; i < 10; i++) {
switch(i)
{
case 4:
case 5:
case 7:
case 9:
continue;
default:
//otherewise
}
}
如果以后要修改,则更容易理解和维护。
编辑:
如果您正在使用不允许直通的编码标准,那么,当前代码就可以了。最多,如果需要,您可以创建一个额外的函数来检查i
的有效性,并根据真/假(0/1)返回值,您可以做出决定。附加功能将进行if
检查。
答案 2 :(得分:1)
好吧,也许有点魔术?
#define MAGIC_NUMBER 0x2B0 // binary 001010110000 with bits 4,5,7,9 set
...
if ( (MAGIC_NUMBER >> i) & 0x1)
continue;
更新:原始代码很好。如果真的需要,这只是一个替代方案。
答案 3 :(得分:0)
// comment on WHY these numbers!!!
int values[] = { 0, 1, 2, 3, 6, 8 };
for (i = 0; i < sizeof(values)/sizeof(values[0]); i++ )
{
int value = values[i];
...
}
答案 4 :(得分:0)
我认为您的代码看起来很好,但是如果您正在寻找更美观的内容,那么&#39; if&#39;有条件的你可以这样做:
for(i=0;i<10;i++){
if(foo(i)){
continue;
/*some code */
}
}
int foo(int i){
return ((i == 4) || (i == 5) || (i == 7) || (i == 9));
}
答案 5 :(得分:-1)
有点惊讶,没有人说过明显的解决方案......
无论如何,在你的情况下我会做的是替换你的循环:
if ((i == 4) || (i == 5) || (i == 7) || (i == 9))
continue;
/*some code */
与
if (i == (4|5|7|9)) {
continue;
/* some code */
}