+ -
当前位置:首页 → 问答吧 → 如何优化嵌套循环次数不定的代码

如何优化嵌套循环次数不定的代码

时间:2011-12-14

来源:互联网

当前实现非常的不完美,根据循环次数走不同的条件分支,有什么办法能将这两个分支给统一吗?
Python code
echo trac_rows=${trac_rows}
count=0;
# start to dispose the options
if [ ${trac_rows} -eq 1 ]; then
{
    LOOP=$((${start[1]}))
    while [[ $LOOP -le $((${end[1]})) ]]; do
    {
        echo LOOP[1]=$LOOP
        echo count=$count
        count=$((count+1))
        LOOP=`expr ${LOOP} + $((${step[1]}))` 
    }
    done
}
elif [ ${trac_rows} -eq 2 ]; then
{
    LOOP[1]=$((${start[1]}))
    while [[ ${LOOP[1]} -le $((${end[1]})) ]]; do
    {
        LOOP[2]=$((${start[2]}))
        while [[ ${LOOP[2]} -le $((${end[2]})) ]]; do
        {
            echo LOOP[2]=$LOOP
            echo count=$count
            count=$((count+1))
            LOOP[2]=`expr ${LOOP[2]} + $((${step[2]}))`
        }
        done
        LOOP[1]=`expr ${LOOP[1]} + $((${step[1]}))` 
    }
    done
}
else
{
    echo "too many nesting options"
}
fi

作者: zhongyunde   发布时间: 2011-12-14

不习惯写shell,看着有点头大。
if [ ${trac_rows} -eq 1 ]这部分不要,合并到elif [ ${trac_rows} -eq 2 ]里面的代码中,进入的条件也合并在一起,在最内层循环加上条件判断,符合条件做完一次操作后就break,不符合就不会break就是多层循环。
是不是这样呢

作者: askandstudy   发布时间: 2011-12-14

好像也很土,应该是在:
while [[ ${LOOP[2]} -le $((${end[2]})) ]]; do这句前面根据条件来判断,设置循环变量的值以便让最内层循环在${trac_rows}等于1时只循环一次。

作者: askandstudy   发布时间: 2011-12-14