簡體   English   中英

如何將 map 添加到地圖列表中?

[英]How to add a map into List of maps?

假設我有這個地圖列表:

List values = [
  {
    'icon': FontAwesomeIcons.book,
    'title': 'A',
    'books': [
      {'author': 'Max', 'age': 30},
      {'author': 'Dani', 'age': 45}
    ]
  },
  {
    'icon': FontAwesomeIcons.book,
    'title': 'B',
    'books': [],
  }
];

如何檢查這本書是否存在於標題 'A' {'author': 'Steve', 'age': 28},如果不存在如何添加。

編輯:

我想要達到的結果是:

List values = [
      {
        'icon': FontAwesomeIcons.book,
        'title': 'A',
        'books': [
          {'author': 'Max', 'age': 30},
          {'author': 'Dani', 'age': 45},
          {'author': 'Steve', 'age': 28} 
        ]
      },
      {
        'icon': FontAwesomeIcons.book,
        'title': 'B',
        'books': [],
      }
    ];

您可以使用.firstWhere來查找項目,例如

final result = values.firstWhere(
  (element) => element["title"] == "A",
  orElse: () => null,
);

print(result);

if (result == null) {
  values.add({
    'icon': FontAwesomeIcons.book,
    'title': 'A',
    'books': [
      {'author': 'Max', 'age': 30},
      {'author': 'Dani', 'age': 45}
    ]
  });
}

print(values);

我強烈推薦使用數據模型。 它會讓你的工作更輕松。

class DataModel {
  String? title;
  List<Books>? books;

  DataModel({this.title, this.books});

  DataModel.fromJson(Map<String, dynamic> json) {
    title = json['title'];
    if (json['books'] != null) {
      books = <Books>[];
      json['books'].forEach((v) {
        books!.add(new Books.fromJson(v));
      });
    }
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['title'] = this.title;
    if (this.books != null) {
      data['books'] = this.books!.map((v) => v.toJson()).toList();
    }
    return data;
  }
}

class Books {
  String? author;
  int? age;

  Books({this.author, this.age});

  Books.fromJson(Map<String, dynamic> json) {
    author = json['author'];
    age = json['age'];
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = new Map<String, dynamic>();
    data['author'] = this.author;
    data['age'] = this.age;
    return data;
  }
}

使用此 model 時,您可以輕松轉換和編輯數據:

List<DataModel> list = [];
  for(final item in values){
    list.add(DataModel.fromJson(item));
  }
  
  final bookExcists = list.any((book) => book.title == 'A');
  
  if(bookExcists){
    list.firstWhere((book) => book.title == 'A').books?.add(Books.fromJson({'author': 'Steve', 'age': 28}));
  }
  
  
  for(final item in list){
    print(item.toJson());
  }

// Check by title final bookExcists = values.any((book) => book['title'] == 'A'); if(!bookExcists){ values.add({ 'icon': FontAwesomeIcons.book, 'title': 'A', 'books': [ {'author': 'Max', 'age': 30}, {'author': 'Dani', 'age': 45} ] }); } print(values);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM