一直以为是等价的..好坑啊,还是老实用 for 循环了
一直以为是等价的..好坑啊,还是老实用 for 循环了
|
SinarJun 20, 2018 via Android
1
赋值用 map 吧
|
|
bumzJun 20, 2018
2
C++ 就行
for (auto & a : b) { a = 0; } |
|
0x11901Jun 20, 2018
3
for each 只是遍历,赋值用 map(std::transform)
|
|
LangIntegerJun 20, 2018 via Android
4
归根结底,还是因为 java 只有值传递吧~
|
|
xomixJun 20, 2018
6
遍历中赋值会导致遍历集合变更,如果要支持便利赋值就要支持便利的时候便利的不再是键值对组合,利用对象复制等功能可以牺牲资源换可读性。
.net 写法如下,java 我不是很熟练不在这里班门弄斧了。 Dictionary<string, string> lst = new Dictionary<string, string>() { { "1", "1" }, { "2", "2" } }; foreach (string key in lst.Keys.ToList()) { lst[key] = lst[key] + "hello"; } 这里对 keys 的集合进行了一个 ToList(),实现了一个对象复制,这时候修改原对象就不会造成便利的集合更改了。 java 可能没有 Linq 支持 ToList()这个方法我就不知道该怎么写了。 |
|
MagentaizeJun 20, 2018 via Android
7
foreach 是访问者模式
|
|
Narcissu5Jun 20, 2018
8
foreach 是函数式的方法,函数式的基本特征之一就是不可变。
也就是如果需要修改的话,返回一个新列表而不是修改之前的 |
|
lurenwJun 20, 2018
10
java 的 closure 是 capture by value 的。如果要修改,考虑用一个长度为 1 的数组来传外部变量吧。
|
|
ShineSmileJun 20, 2018
11
没记错 foreach 是与 IEnumable 接口相关?
|
|
ShineSmileJun 20, 2018
16
感觉是不是还要详细学一下 yield ?
|
|
17
Java 中的 lambda 捕获的变量只能是 final 或者是实质不可变的。
以后应该会改成可以捕获可变的吧。 |
|
szq8014Jun 21, 2018
18
java 里面 foreach 是用 iterator 来实现的
|