我无法使用匿名函数更改数组的元素:
var collection=[0, 1, 2];
collection.forEach((c)=> c+=1);
print(collection);
该变体无法正常工作
var collection = [0, 1, 2];
for (var x in collection) {
x=x+1;
}
print(collection);
答案 0 :(得分:2)
如果您希望替换/更新列表(List<int> items = [1, 2, 3]
)中的所有项目:
items = items.map((x) => x + 1).toList();
for (int i = 0; i < items.length; i++) items[i] += 1;
items = List<int>.generate(items.length, (i) => items[i] + 1);
List<int> tempItems = [];
items.forEach((x) => tempItems.add(x + 1));
items = tempItems;
答案 1 :(得分:1)
您不能将参数更改为函数或var-in循环。您可以在它们上调用方法,这可能会使它们变异,但直接分配给它们并不会改变从中有效复制它们的值。
答案 2 :(得分:1)
collection.forEach((c)=> c+=1);
在上面的行中,您将参数增加1,并且不会影响列表。
等同于:
collection.forEach((int c) {// in this case int because list contains int's
c = c + 1;
});
如您所见,更改参数(局部变量)的值毫无意义。
由于它是0,1,2
,因此您可以这样做:collection.forEach((c)=> collection[c] = c+1);
。这是一种愚蠢的方法,因为无论何时更改任何值,都会出现错误(超出范围)。
因此,您可以通过以下几种方式更改列表值:
简单方法:
void main() {
var collection=[0, 1, 2];
for(int i = 0; i < collection.length; i++) {
collection[i] += 1;
}
print(collection);
}
使用replaceRange
:
void main() {
var collection=[0, 1, 2];
var temp = collection.map((c) => c+1).toList();
collection.replaceRange(0, collection.length, temp);
print(collection);
}