【问题标题】:How to not duplicate same item in a list dart?如何不在列表飞镖中重复相同的项目?
【发布时间】:2020-02-21 13:53:30
【问题描述】:

我创建了一个 listView 和按钮,当我单击按钮时,它会向 listView 添加一个项目。

问题是我实际上不想在列表中重复相同的项目。

我尝试了 .contains 方法,但没有成功。

我想要一个好的解决方案,

【问题讨论】:

    标签: arrays list button flutter dart


    【解决方案1】:

    有不同的方法来实现这一点:

    1) 迭代列表并检查是否每个元素都没有 您认为相等的属性:

    items = [Item(id: 1), Item(id: 2)];
    newItem = Item(id: 2);
    if (items.every((item) => item.id != newItem.id)) {
      items.add(newItem);
    }
    

    2) 使用contains() 并覆盖== operator(也覆盖hashCode) 在具有您认为相等的属性的对象类中。

    items = [Item(id: 1), Item(id: 2)];
    newItem = Item(id: 2);
    if (!items.contains(newItem)) {
      items.add(newItem);
    }
    
    // inside Item class
    @override
    bool operator ==(other) {
      return this.id == other.id;
    }
    
    @override
    int get hashCode => id.hashCode;
    

    3) 代替List 使用Set,其中每个元素只能出现一次。它的默认实现是LinkedHashSet,用于跟踪订单。

    【讨论】:

      【解决方案2】:

      使用集合代替列表。

      void main() {
        Set<String> currencies = {'EUR', 'USD', 'JPY'};
        currencies.add('EUR');
        currencies.add('USD');
        currencies.add('INR');
        print(currencies);
      }
      

      输出:{EUR, USD, JPY, INR} // unique items only

      参考:Set<E> class

      【讨论】:

        【解决方案3】:

        在添加之前检查 List 是否已经包含该元素: https://api.flutter.dev/flutter/dart-core/List-class.html

        if(!List.contains(element) { add }
        

        contains 方法检查是否相等,而不是用于参考,因此只要您比较相似的元素,它就必须工作。如果您的代码不起作用,请提供给我们。谢谢。

        【讨论】:

          【解决方案4】:

          如果您的列表包含自定义对象,您可能需要覆盖自定义类中的 equality operator

          您也可以使用Set 代替列表。

          【讨论】:

            猜你喜欢
            • 2020-01-02
            • 2012-08-15
            • 2021-07-27
            • 1970-01-01
            • 2021-02-05
            • 2019-07-09
            • 2022-11-22
            • 2013-08-29
            • 2013-12-06
            相关资源
            最近更新 更多