镖。清单的变更要素

时间:2018-07-07 22:41:48

标签: arrays list loops collections dart

我无法使用匿名函数更改数组的元素:

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);

3 个答案:

答案 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);
}