【问题标题】:How do I add unique elements to a List?如何将唯一元素添加到列表中?
【发布时间】:2020-02-01 04:15:22
【问题描述】:

在颤振/飞镖中,如何在确保每个新条目都是唯一的(即没有重复项)的同时将元素添加到列表中。

所以我们知道如何将元素添加到列表中:

List myList = [];

然后

myList.add(...);

但我想知道如何确保之前没有添加过任何已添加的内容。

非常感谢,

【问题讨论】:

    标签: list flutter dart


    【解决方案1】:
     **Vanilla Dart**
    
    Loop through the list, adding IDs to a set as you go. Whenever you add an ID to the set that didn't already exist, add that element to a new list of distinct values.
    
    void main() {
      var list = [
        Student('a'),
        Student('a'),
        Student('b'),
        Student('c'),
      ];
      
      var idSet = <String>{};
      var distinct = <Student>[];
      for (var d in list) {
        if (idSet.add(d.id)) {
          distinct.add(d);
        }
      }
    }
    
    class Student {
      Student(this.id);
      final String id;
    }
    

    【讨论】:

      【解决方案2】:

      您可以选择使用 Dart 的扩展功能

      extension ListExtension<E> on List<E> {
         void addAllUnique(Iterable<E> iterable) {
           for (var element in iterable) {
             if (!contains(element)) {
               add(element);
             }
           }
         }
       }
      

      【讨论】:

        【解决方案3】:

        您应该考虑使用集合。集合是唯一项的无序集合。

        var mySet = <String>{};
        mySet.add('something');
        

        【讨论】:

        • 请注意,Set 在 Dart 中的默认实现是 LinkedHashSet,它确实有一个顺序 - 插入顺序。
        【解决方案4】:

        使用地图进行初始添加,地图不会让重复然后从地图转换为列表。 地图是名称值对,因此如果这些是字符串,只需将名称和值设置为相同,如果它是一个对象,则将“uniqueID”设置为名称,将对象设置为值...... 然后,您可以获取 Name 集或通常的 Value 集,并将其转换为列表以进行迭代和循环。

        https://www.tutorialspoint.com/dart_programming/dart_programming_map.htm

        【讨论】:

        • 谢谢特蕾莎。我会考虑这个选项。但我对地图的问题是它只允许键/值对。即 1 个键 = 1 个值。与列表一样,我们可以有许多条目 - 如果我们有一个类数据结构,它可以很整洁 - 就像一个数据库。
        • @Kiro777 你也可以有多个地图条目
        • 或者更好的是,Set,特别是 LinkedHashSet,它可以 O(1) 检测重复项并按插入顺序进行迭代。
        猜你喜欢
        • 2016-09-10
        • 1970-01-01
        • 2015-08-01
        • 1970-01-01
        • 2023-01-13
        • 2013-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多