标签: iteration

为什么在lambda表达式中使用迭代变量很糟糕

我只是写了一些快速代码并注意到这个编译器错误

在lambda表达式中使用迭代变量可能会产生意外结果.
相反,在循环中创建一个局部变量并为其分配迭代变量的值.

我知道这意味着什么,我可以很容易地解决它,而不是什么大不了的事.
但我想知道为什么在lambda中使用迭代变量是个坏主意?
我以后可能会遇到什么问题?

vb.net iteration lambda warnings

51
推荐指数
2
解决办法
1万
查看次数

为什么我们不能分配foreach迭代变量,而我们可以使用访问器完全修改它?

我只是对此感到好奇:以下代码无法编译,因为我们无法修改foreach迭代变量:

        foreach (var item in MyObjectList)
        {
            item = Value;
        }
Run Code Online (Sandbox Code Playgroud)

但是以下将编译并运行:

        foreach (var item in MyObjectList)
        {
            item.Value = Value;
        }
Run Code Online (Sandbox Code Playgroud)

为什么第一个无效,而第二个可以在下面做同样的事情(我正在为此寻找正确的英语表达,但我不记得了.在...下面??^^)

c# iteration foreach accessor

50
推荐指数
5
解决办法
6万
查看次数

迭代嵌套的JavaScript对象

我正在尝试遍历嵌套对象以检索由字符串标识的特定对象.在下面的示例对象中,标识符字符串是"label"属性.我无法绕过如何遍历树以返回适当的对象.任何帮助或建议将不胜感激.

var cars = {
  label: 'Autos',
  subs: [
    {
      label: 'SUVs',
      subs: []
    },
    {
      label: 'Trucks',
      subs: [
        {
          label: '2 Wheel Drive',
          subs: []
        },
        {
          label: '4 Wheel Drive',
          subs: [
            {
              label: 'Ford',
              subs: []
            },
            {
              label: 'Chevrolet',
              subs: []
            }
          ]
        }
      ]
    },
    {
      label: 'Sedan',
      subs: []
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

javascript iteration

50
推荐指数
3
解决办法
8万
查看次数

在Python中,如何迭代一个迭代器然后另一个?

我想迭代两个不同的迭代器,如下所示:

file1 = open('file1', 'r')
file2 = open('file2', 'r')
for item in one_then_another(file1, file2):
    print item
Run Code Online (Sandbox Code Playgroud)

我希望打印file1的所有行,然后是file2的所有行.

我想要通用的东西,因为迭代器可能不是文件,这只是一个例子.我知道我可以这样做:

for item in [file1]+[file2]:
Run Code Online (Sandbox Code Playgroud)

但这会将两个文件都读入内存,我宁愿避免使用.

python iteration file

49
推荐指数
3
解决办法
2850
查看次数

如何迭代C中的字符串?

现在我正在尝试这个:

#include <stdio.h>

int main(int argc, char *argv[]) {

    if (argc != 3) {

        printf("Usage: %s %s sourcecode input", argv[0], argv[1]);
    }
    else {
        char source[] = "This is an example.";
        int i;

        for (i = 0; i < sizeof(source); i++) {

            printf("%c", source[i]);
        }
    }

    getchar();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

char *source = "This is an example.";
int i;

for (i = 0; i < strlen(source); i++){

    printf("%c", source[i]);
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误

Test.exe中0x5bf714cf(msvcr100d.dll)的未处理异常:0xC0000005:读取位置0x00000054时发生访问冲突.

(从德语松散翻译)

那我的代码出了什么问题?

c iteration

48
推荐指数
4
解决办法
16万
查看次数

对于多维范围,是否有Python等效范围(n)?

在Python上,range(3)将返回[0,1,2].是否存在多维范围的等价物?

range((3,2)) # [(0,0),(0,1),(1,0),(1,1),(2,0),(2,1)]
Run Code Online (Sandbox Code Playgroud)

因此,例如,循环通过基于图块的游戏上的矩形区域的图块可以写为:

for x,y in range((3,2)):
Run Code Online (Sandbox Code Playgroud)

注意我不是要求实现.我想知道这是否是一个公认的模式,如果在Python或它的标准/公共库上有内置函数.

python iteration numpy range

48
推荐指数
4
解决办法
2万
查看次数

通过AS3字典高效循环

for (var k in dictionary) 
{
  var key:KeyType = KeyType(k);
  var value:ValType = ValType(dictionary[k]); // <-- lookup
  // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这是我用来遍历字典中的条目.正如您在每次迭代中看到的那样,我在字典中执行查找.是否有更有效的方法来迭代字典(同时保持对密钥的访问)?

iteration iterator actionscript-3

45
推荐指数
1
解决办法
5万
查看次数

并发修改例外:添加到ArrayList

问题发生在

Element element = it.next();
Run Code Online (Sandbox Code Playgroud)

并且包含该行的代码位于 OnTouchEvent

for (Iterator<Element> it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    if(touchX > element.mX  && touchX < element.mX + element.mBitmap.getWidth() && touchY > element.mY   
            && touchY < element.mY + element.mBitmap.getHeight()) {  

        //irrelevant stuff..

        if(element.cFlag){
            mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY));
            element.cFlag = false;

        }           
    }
}
Run Code Online (Sandbox Code Playgroud)

所有这一切都在里面synchronized(mElements),这里mElements是一个ArrayList<Element>

当我触摸它时Element,它可能会激活cFlag,这将创建另一个Element具有不同属性的属性,这些属性将从屏幕上掉落并在不到一秒的时间内自行消失.这是我创建粒子效果的方式.我们可以称之为"粒子" crack,就像构造函数中的String参数一样.

这一切都正常,直到我添加另一个主要Element.现在我同时Elements在屏幕上有两个,如果我触摸最新的Element,它工作正常,并启动粒子.

但是,如果我触摸并激活cFlag旧版本Element,那么它会给我一个例外.

 07-28 15:36:59.815: ERROR/AndroidRuntime(4026): FATAL …
Run Code Online (Sandbox Code Playgroud)

java iteration android exception arraylist

45
推荐指数
4
解决办法
6万
查看次数

所有迭代算法都可以递归表达吗?

如果没有,是否有一个好的计数器示例显示迭代算法,其中不存在递归对应物?

如果所有迭代算法都可以递归表达,那么在哪些情况下更难以做到这一点?

此外,编程语言在这一切中扮演什么角色?我可以想象,Scheme程序员对Java迭代(=尾递归)和堆栈使用的看法与Java专用程序员不同.

iteration recursion programming-languages language-theory

44
推荐指数
4
解决办法
2万
查看次数

如何遍历对象的ArrayList对象的ArrayList?

举个例子:

假设我有班级电话Gun.我有另一个班级电话Bullet.

Class Gun有一个ArrayList Bullet.

迭代通过Arraylist ...而Gun不是这样做:

ArrayList<Gun> gunList = new ArrayList<Gun>();
for (int x=0; x<gunList.size(); x++)
    System.out.println(gunList.get(x));
Run Code Online (Sandbox Code Playgroud)

我们可以简单地遍历ArrayList Gun:

for (Gun g: gunList) System.out.println(g); 
Run Code Online (Sandbox Code Playgroud)

现在,我想迭代并打印出Bullet我的第三个Gun对象:

for (int x=0; x<gunList.get(2).getBullet().size(); x++)  //getBullet is just an accessor method to return the arrayList of Bullet 
    System.out.println(gunList.get(2).getBullet().get(x));
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:如何使用ArrayList迭代打印输出枪对象列表,而不是使用传统的for-loop?

java iteration arraylist object

44
推荐指数
3
解决办法
23万
查看次数