如何从列表中删除项目并返回新列表而不在颤动中删除项目

Posted

技术标签:

【中文标题】如何从列表中删除项目并返回新列表而不在颤动中删除项目【英文标题】:How to remove item from list and return new list without removed item in flutter 【发布时间】:2021-09-15 19:25:00 【问题描述】:

我有一个字符串列表为List<String> temp = ['a', 'b', 'c', 'd']; 我想修改并从列表中删除特定项目,并返回没有删除项目的新列表。

例如,如果我想删除索引2,我想得到的是['a', 'b', 'd'] removeAt 不起作用,因为它只是返回已删除的字符串项...

【问题讨论】:

【参考方案1】:

您可以使用级联表示法 (https://dart.dev/guides/language/language-tour#cascade-notation),在调用 removeAt 时返回列表。

void main() 
  print(['a', 'b', 'c', 'd']..removeAt(2));

【讨论】:

谢谢 - 这就是我想要的。你知道为什么级联符号允许我们返回原始列表而不是删除字符串吗? Cascade 基本上只是返回你操作的对象,而不是方法调用的返回值。【参考方案2】:

temp.removeAt(index); 正是您想要的。

void main() 
  List<String> temp = ['a', 'b', 'c', 'd'];
  temp.removeAt(2);
  print(temp);

这个函数打印出['a', 'b', 'd'],这是你想要得到的正确结果?

但是如果你也可以用这个来获得移除的值。

void main() 
  List<String> temp = ['a', 'b', 'c', 'd'];
  var removedValue = temp.removeAt(2);
  print(removedValue);

如果您想要获得原始列表的克隆但没有元素,您可以像这样创建一个新列表。

  void main() 
  List<String> temp = ['a', 'b', 'c', 'd'];
  int indexToRemove = 2;
  List newList = temp.where((x) => temp.indexOf(x) != indexToRemove).toList();
  print(newList);

【讨论】:

【参考方案3】:

如果您想删除有逻辑的项目,您还可以查看下面的代码,这将帮助您删除有条件的项目。

List<String> temp = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'];

for (var i = 0; i < temp.length; i++)
  if(temp[i] == "Mon") 
    int index = i;
 

temp.removeAt(index);

【讨论】:

以上是关于如何从列表中删除项目并返回新列表而不在颤动中删除项目的主要内容,如果未能解决你的问题,请参考以下文章

在颤动中向上/向下滚动列表时如何在列表中插入和删除项目?

如何在颤动中从列表中删除项目时重新加载列表

在颤动中从地图<日期时间,列表>中删除项目

删除列表中的重复项

删除列表中的重复项

JQuery - 删除列表项的返回ID