簡體   English   中英

如果兩個數組的 DART 大小不同,如何合並兩個數組?

[英]How to merge two arrays if they both don't have the same size DART?

我有一個問題,如果兩個列表的大小不同,如何組合它們?

例如,我有

 final List<CoffeeShop> coffeeShop = <CoffeeShop>[
    CoffeeShop(mrId: 1, shopTitle: 'Strarbucks A'),
    CoffeeShop(mrId: 2, shopTitle: 'Dunkin doghnuts B'),
    CoffeeShop(mrId: 3, shopTitle: 'Subway B'),
    CoffeeShop(mrId: 4, shopTitle: 'MCCafe A'),
    CoffeeShop(mrId: 5, shopTitle: 'Coffee Shop B'),
  ];

第二個名單:

final List<CoffeeShopMenu> coffeeMenu = <CoffeeShopMenu>[
    CoffeeShopMenu(sid: 1, shopMenuTitle: 'Matcha'),
    CoffeeShopMenu(sid: 1, shopMenuTitle: 'Matcha'),
    CoffeeShopMenu(sid: 4, shopMenuTitle: 'Matcha'),
    CoffeeShopMenu(sid: 4, shopMenuTitle: 'pie'),
  ];

我需要輸出:

List <Coffee> unite = <UnitedCoffee>[
UnitedCoffe(shopMenuTitle: 'Matcha', shopTitle: 'Dunkin doghnuts B),
]

當我試圖解決這個問題時,我做了類似的事情,但在這種情況下,兩個數組應該具有相同的大小,如果第一個數組中的某些內容發生變化,我應該在另一個數組中發生相同的事情。

  final List<Coffee> coffee = uniteCoffee(coffeeShop, coffeeMenu);
  
  print(coffee);
  print(coffee[1].menu.shopMenuTitle);
  print(coffee[1].shop.shopTitle);
}

List<Coffee> uniteCoffee(List<CoffeeShop> coffeeShop, List<CoffeeShopMenu> coffeeMenu){
  if(coffeeShop.length != coffeeShop.length) return [];
  
  List<Coffee> temp = <Coffee>[];
  
  for(int i = 0; i<coffeeShop.length; i++) {
    temp.add(Coffee(coffeeShop[i], coffeeMenu[i]));
  }
  
  return temp;
}

另外我有一個問題^ 如果我使用 Future Provider,在這種情況下我該如何解決這個問題?

這是一個僅當將 coffeeShop 與 coffeeMenu 聯合的條件是 mrId 時才有效的示例,當您在另一個內部使用循環時,數組大小不會有問題。

List<Coffee> uniteCoffee(List<CoffeeShop> coffeeShopList, List<CoffeeShopMenu> coffeeMenuList){  
  List<Coffee> temp = <Coffee>[];
  
  for(CoffeeShop coffeeShop in coffeeShopList) {
    for(CoffeeShopMenu coffeeMenu in coffeeMenuList){
      if(coffeeShop.mrId == coffeeMenu.mrId) {
        temp.add(Coffee(coffeeShop[i], coffeeMenu[i]));
      }
    }
  }
  
  return temp;
}

暫無
暫無

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

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