我在这里试图做的是,我试图从CustomerFavoriteRepository中按给定id查找文章.我有两个不同的列表(articleList、customerFavList),我正在比较这两个列表的ID,并将它们添加到空数组(customFavartList).是否有人帮助我如何使用for循环实现这一点?

void main() {
  final articleList = ArticleRepository().getArticleList();
  final customerFavList = CustomerFavoriteRepository().getCustomerFavorite();
  final List<NewCustomerFav> customFavartList = [];

  //this is what i tried 
  for (final articleId in articleList) {
    for (final customArticleId in customerFavList) {
      if (articleId.id == customArticleId.articleId) {
        customFavartList.add();
      }
    }
  }
}

class NewCustomerFav {
  final int id;
  final Article article;
  final int like;

  NewCustomerFav(this.id, this.article, this.like);
}

class ArticleRepository {
  final _articleList = [
    Article(1, 'burger'),
    Article(2, 'pizza'),
    Article(3, 'chicken'),
    Article(4, 'pasta'),
  ];

  List<Article> getArticleList() {
    return _articleList;
  }
}

class CustomerFavoriteRepository {
  final _customerFavoriteList = [
    CustomerFavorite(1, 1, 2),
    CustomerFavorite(2, 2, 2),
    CustomerFavorite(3, 3, 4),
  ];

  List<CustomerFavorite> getCustomerFavorite() {
    return _customerFavoriteList;
  }
}

class CustomerFavorite {
  final int id;
  final int articleId;
  final int like;

  CustomerFavorite(this.id, this.articleId, this.like);
}

class Article {
  final int id;
  final String name;

  Article(this.id, this.name);
}

推荐答案

您的问题的简单答案是,您需要构造NewCustomerFav,并将其传递给add方法:

//this is what i tried 
for (final article in articleList) {
  for (final customArticle in customerFavList) {
    if (article.id == customArticle.articleId) {
      // The values are just for example - I'm not certain how
      // you mean to derive `id` or `like` for a NewCustomerFav.
      final fav = NewCustomerFav(0, article, 1);
      customFavartList.add(fav);
    }
  }
}

另一方面,您的算法可以在这里进行改进-现在,构建customFavartList将需要n*m个操作,其中n是文章数,m是Collection 夹数.

它可以减少,以便算法按n+m的顺序执行,相反,当有许多文章,并且客户有许多Collection 夹时,这将更好地扩展.

方法是从favoritesList创建Set个ID,如下所示:

// Assuming customerFavList is a list of int ids
final customerFavIdSet = Set.from(customerFavList.map((e) => e.articleId));

for (final article in articleList) {
  // Now you can check whether the article is a favorite with this one
  // query, rather than searching the whole list.
  if (customerFavIdSet.contains(article.id) {
    final fav = NewCustomerFav(0, article, 1);
    customFavartList.add(fav);
  }
}

Dart相关问答推荐

异类列表中函数类型不变性的解决方法

S,返回Future.sync()的函数和不需要等待的异步函数有什么区别?

列表、捕获和...REST";元素的模式匹配

为什么 Dart 的编译器认为代码可能为空,而代码保证它不能为空?

当 ng-repeat 嵌套在 AngularDart 中时访问外部 $index

Flutter - 可以在没有 Firebase 的情况下使用 Google 登录吗?

dart:js 和 js 包有什么区别?

Dart 包 - 如何隐藏内部方法和类?

Flutter 以编程方式触发 FutureBuilder

Flutter:如何正确实现 FlutterError.OnError

Flutter:如何检测键盘按键?

如何在 Flutter 中匹配密码和确认密码?

什么时候在 Dart 中使用 num

polymer SEO 是否友好?

什么是健全的编程语言?

Dart 中的错误与异常

dart捕捉clause子句

Dart 空值判断习惯用法或最佳实践是什么?

在 Dart 中克​​隆list列表、map或set集合

Dart 中的const和final关键字有什么区别?