首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果它们是重复的,则抖动合并数组

如果它们是重复的,则抖动合并数组
EN

Stack Overflow用户
提问于 2022-02-07 02:00:25
回答 2查看 330关注 0票数 2

我需要合并重复的数组

我有这样的数据

代码语言:javascript
复制
var filterData = [{'date': '25, feb', 'data': ['asd','dsa']}, {'date': '25, feb', 'data': ['asd','dsa']}, {'date': '26, feb', 'data': ['asd','dsa']}]

我想像[{'date': '25, feb', 'data': ['asd','dsa','asd','dsa']}, {'date': '26, feb', 'data': ['asd','dsa']}]一样过滤它

EN

回答 2

Stack Overflow用户

发布于 2022-02-07 08:37:45

filterData数据类型为List<Map<String, dynamic>>,此dynamic满足StringList<String>

filterData和结果数据类型=> List<Map<String, dynamic>>

List> + List>

让我们从Map那里获得一个独特的约会。现在我们要创建一个地图,然后我们将转换为列表。

dartPad上运行。

代码语言:javascript
复制
Map<String, List<String>> result = {};

for (final data in filterData) {
  /// assume filterData will never cause null
  final String key = data['date'];
  final List<String> value = data['data'];
  // just append map value
  if (result.containsKey(key)) {
    result[key] = [...value, ...value];
    ;
  } else {
    //init key-value
    result.putIfAbsent(key, () => value);
  }
}

//* Current State of result: {25, feb: [asd, dsa, asd, dsa], 26, feb: [asd, dsa]}

//convert map to list
List<Map<String, dynamic>> formatedListResult = result.entries
    .map(
      (e) => {
        'date': e.key,
        'data': e.value,
      },
    )
    .toList();

print(formatedListResult);
票数 1
EN

Stack Overflow用户

发布于 2022-02-07 04:45:47

您可以创建一个模型类,主要用于获取类型安全性和等式检查==。后者是必需的,这样一个集合就可以知道两个对象是相等的。

代码语言:javascript
复制
// Feel free to change the class name
class Datum {
  final String date;
  final List<String> data;

  Datum(this.date, this.data);

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is Datum && runtimeType == other.runtimeType && date == other.date && data == other.data;

  @override
  int get hashCode => date.hashCode ^ data.hashCode;

  factory Datum.fromJson(Map<String, dynamic> json) => Datum(
        json["date"] as String,
        List<String>.from((json["data"] as List).map((x) => '$x')),
      );

  Map<String, dynamic> toJson() => {
        "date": date,
        "data": List<dynamic>.from(data.map((x) => x)),
      };
}

然后您可以使用一个集合,这样它就不会保存重复的对象。通过重写==hashCode,Set检查两个对象是否相同。

代码语言:javascript
复制
var filterData = {
Datum.fromJson({'date': '25, feb', 'data': ['asd','dsa']}), 
Datum.fromJson({'date': '25, feb', 'data': ['asd','dsa']}),
 Datum.fromJson({'date': '26, feb', 'data': ['asd','dsa']})
}

注意,filterData现在是一个集合,而不是一个列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71012787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档