首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何跨越带有移动窗口的线性2D阵列

如何跨越带有移动窗口的线性2D阵列
EN

Stack Overflow用户
提问于 2015-11-19 14:56:58
回答 1查看 18关注 0票数 0

假设我有一个4x4数组,该数组按行的主要顺序被平放,并且我希望在一个新的1D数组中收集每2x2个窗口中的一个条目,这将导致:

0,2,8,10

对于4x8,它将导致0,2,4,6,16,18,20,22。

对于8x4,它将导致0,2,8,10,16,18,24,26。

实现这一目标的简单循环:

代码语言:javascript
复制
const int STEP = 2;
for(int i = 0; i < len; ++i)
  arr[i] =  i * STEP + (i*STEP / SIZE_Y) * SIZE_Y;

但是,当数组大小在任何维度上都是奇数时,我会遇到问题。3x3应该导致

0,2,6,8但在0,2,7,12中

我如何扩展我的公式,使它不会变得过于复杂,处理所有这些边界-情况,但仍然适用于一般情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-19 17:19:22

我使用了嵌套循环,它工作得非常完美,而且它更容易理解:

代码语言:javascript
复制
    int width, height;
    width = (int) ceil((double)SIZE_Y/STEP);
    height = (int) ceil((double)SIZE_X/STEP);
    int[] arr = new int[width*height];
    for(int i=0; i < height; i ++){
        for(int j=0; j < width; j ++){
            arr[i*width+j] = STEP*i*SIZE_Y + STEP*j;
        }
    }  

但是,如果您仍然坚持使用可读的单循环-less --则可以使用此单循环:

代码语言:javascript
复制
for(int i=0; i<width*height; i++)
    {
        arr[i] = (i%width)*STEP + (i/width)*SIZE_Y*STEP;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33807252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档