如何在Dart中创建Array(list)元素?

时间:2012-10-15 21:19:07

标签: arrays list element unique dart

我需要从列表中删除冗余(字符串)元素。或者也许是为了防止它们首先被输入是更好的解决方案?集合不允许重复,但它们也不保持顺序,我需要订单。这对我来说是一个常见的问题,所以我正在寻找一种可能的语言解决方案来提高效率。

(过去我扩展了一个Array类来添加我自己的add_unique()方法,但这似乎是一个很常见的问题,由语言处理并且可能更有效。)

谢谢,

_g

5 个答案:

答案 0 :(得分:2)

你需要一个LinkedSet只包含唯一身份并保持插入顺序,但目前我们没有在dart中。但是,您可以使用LinkedHashMap模拟LinkedSet:

var input = ["apple", "orange", "cherries", "pears", "apple", "apple", "orange"];
var uniques = new LinkedHashMap<String, bool>();
for (var s in input) {
  uniques[s] = true;
}
for (var key in uniques.getKeys()) {
  print ("$key");
}

答案 1 :(得分:1)

数组对象DART,在https://dartpad.dev/4d3a724429bbd605f4682b7da253a16e中进行测试

void main() {
      var duplicates = [
        {"b": 1},
        {"b": 2},
        {"b": 1},
        {"b": 2}
      ];
    
      var resArr = [];
      duplicates.forEach((item) {
        var i = resArr.indexWhere((x) => x["b"] == item["b"]);
        if (i <= -1) {
          resArr.add({"b": item["b"]});
        }
      });
      print(resArr);
    }

答案 2 :(得分:0)

今天必须手动完成。 Dart不提供保持广告订单的套装。请注意,Dart容器库将进行修改。请访问www.dartbug.com并添加此功能请求。要手动执行此操作,您可以:

1)在添加之前调用indexOf。 2)维护一个集合和一个列表。在List维护订单时,Set可用于保持事物的唯一性。

我建议1。

约翰

答案 3 :(得分:0)

您可以像使用的那样使用列表,并且cutch提到手动添加您自己的方法来验证重复项和排序类似于下面的内容。

import 'dart:html';

var someList = new List<String>();
String newItem = '';

void main() {
  newItem = 'item 3';  
  if(!itemExistsInList(someList, newItem)){
    someList.add(newItem);
    sortList(someList);
  }

  // expected item 3
  print(someList);

  newItem = 'item 1';
  if(!itemExistsInList(someList, newItem)){
    someList.add(newItem);
    sortList(someList);
  }

// expected item 1, item 3
  print(someList);

  newItem = 'item 3';
  if(!itemExistsInList(someList, newItem)){
    someList.add(newItem);
    sortList(someList);
  }

// expected item 1, item 3. Same as previous as secondary item 3 was not added
  print(someList);
}

// returns true if the specified item already exists in the specified list
// otherwise false
bool itemExistsInList(List<String> list, String item){
  return list.some((v) => v.indexOf(item) != -1);
}

// sorts the list
void sortList(List<String> list){
  list.sort((a, b) => a.compareTo(b));
}

每次添加时都不需要调用sortList()函数,我只是为了演示而这样做。只在你真正需要的时候调用它就足够了。

DART library documentation

的“收藏”部分详细解释了

.sort().some().indexOf

答案 4 :(得分:0)

使用 设置 ,然后 toList

SELECT COUNT(*)
FROM Zone z
INNER JOIN
(
    SELECT Repeated
    FROM Repeated
    GROUP BY Repeated
    HAVING COUNT(*) > 1
) r
    ON z.Zone = r.Repeated