列表视图使用 Flutter 中的属性过滤掉最后一行数据

Posted

技术标签:

【中文标题】列表视图使用 Flutter 中的属性过滤掉最后一行数据【英文标题】:List view filter out last row data using property in Flutter 【发布时间】:2020-04-15 09:06:24 【问题描述】:

我有一个包含项目名称、索引和计数的列表。现在有多个具有相同索引的项目,但我想将它们过滤到一个新列表中,该列表将只有每个索引的最后一行数据。

例如,如果我的列表如下:

ALPHa  index 0 and count is 2
ALPHa  index 0 and count is 3
ALPHa  index 0 and count is 4
ALPHa  index 0 and count is 5
ALPHa  index 0 and count is 4
ALPHa  index 0 and count is 3
ALPHa  index 0 and count is 2
ALPHa  index 0 and count is 1
ALPHa  index 0 and count is 5
ALPHa  index 0 and count is 0
BETA  index 1 and count is 1
BETA  index 1 and count is 2
BETA  index 1 and count is 3
BETA  index 1 and count is 4
BETA  index 1 and count is 3
BETA  index 1 and count is 2
BETA  index 1 and count is 3
BETA  index 1 and count is 4
DELTA  index 2 and count is 4
DELTA  index 2 and count is 1
DELTA  index 2 and count is 2
DELTA  index 2 and count is 3

过滤后的列表应该是这样的

ALPHa  index 0 and count is 0
BETA  index 1 and count is 4
DELTA  index 2 and count is 3

谁能告诉我如何过滤掉这个?

我的代码如下:

模态类:

class CartItems 
  String itemname;
  int numberofitems;
  int index;

  CartItems(
    this.itemname,
    this.numberofitems,
    this.index
  );

列表

List <CartItems> cartItems = List();
for(int i =0; i < itemList.length; i++) 
   cartItems.add(CartItems(itemname: itemList[i].itemname, numberofitems: itemList[i].numberofitems,index:index));

【问题讨论】:

【参考方案1】:

试试这个代码。 将您的 原始列表 作为参数传递给将返回 filtered CartItems 的方法列表

List<CartItems> filterList(List<CartItems> itemList)
    int currentItemsIndex = 0;
    CartItems cartItem;
    List < CartItems > cartItems = List();
    for(int i =0 ;i< itemList.length; i++) 
      cartItem = CartItems(itemname: itemList[i].itemname, numberofitems: itemList[i].numberofitems,index:itemList[i].index);
      if(currentItemsIndex == itemList[i].index)
        if(i == itemList.length-1)
          cartItems.add(cartItem);
        
      else
        cartItems.add(cartItem);
      
      currentItemsIndex = itemList[i].index;

    
    return cartItems;
  

【讨论】:

嗯,这基本上返回了作为输入传递的相同列表。但是你的函数给了我一个开始,我修改了代码以获得想要的结果。 for (int i = 0; i 【参考方案2】:

这是获取过滤列表的一种方法,每个 itemName 中只有最后一个。

List<CartItems> itemList = ...;
var filteredCartItems = new LinkedHashMap<String, CartItems>();
for (CartItems item in itemList ) 
  filteredCartItems[item.itemName] = item;

【讨论】:

这也有效,只是我必须使用 index 过滤,所以将过滤的CartItems 更改为 new LinkedHashMap();

以上是关于列表视图使用 Flutter 中的属性过滤掉最后一行数据的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:根据某些条件过滤列表

Flutter Provider-重建列表项而不是列表视图

Flutter:如何知道列表视图中的项目位置?

React defaultValue 导致过滤功能的行为与预期不同

如何过滤掉 UIWebView 中的重复请求

带有过滤条件项的列表视图构建器分页(颤振)