Как преобразовать три списка в карту в DART?

#flutter #dart

#flutter #dart

Вопрос:

Я хочу сгруппировать три списка внутри одной только карты. это три списка.

 main() {
  var baselist = [1, 5, 7];

  var swlist = ['sw1', 'sw2', 'sw3'];

  var getlist = ['on', 'off', 'on', 
                 'off', 'on', 'off',
                 'on', 'off', 'on'];
}
 

Я хочу, чтобы это было похоже на эту карту :

 {
 1: {sw1: on, sw2: off, sw3: on},
 5: {sw1: off, sw2: on, sw3: off},
 7: {sw1: on, sw2: off, sw3: on}
}
 

С учетом того, что каждый элемент в baselist является постоянным для swlist элементов, и каждые три элемента в getlist будут значениями swlist .
тогда какой код преобразует эти списки в одну карту????

Надеюсь, я хорошо объяснил проблему.

Ответ №1:

Вы можете попробовать это

   var baselist = [1, 5, 7];

  var swlist = ['sw1', 'sw2', 'sw3'];

  var getlist = ['on', 'off', 'on', 
                 'off', 'on', 'off',
                 'on', 'off', 'on'];
  Map resultMap = {};
  int index = 0;
  for (int i = 0; i < baselist.length; i  ) {
    Map innerMap = {};
    for (int j = 0; j<swlist.length; i  ) {
      innerMap[swlist[j]] = getlist[index];
      index  
    }
    
    resultMap[baselist[i]] = innerMap;
  }
  
  print(resultMap);
}
 

Комментарии:

1. каждый раз, когда я запускаю программу, она останавливается и ничего не печатает??? вы тестировали этот код? Спасибо

2. здесь возникает проблема, когда, если `I = 1`, например, затем вызывается getlist[i*j] ` j = 0 you expect to be getlist [3]`, но это произойдет getlist[0] . и так далее ….. я думаю написать такой код, как « int x = 0; for (int i = 0;i < baselist.length; i ) { for (int j = 0; j < swlist.length; j ) { внутренняя карта[swlist[j]] = getlist[x]; x ; } печать(x); результирующая карта[список[i]] = внутренняя карта; }print(resultmap); } «

3. Вы правы @ahmedzahran, я отредактировал свой ответ, чтобы отразить лучшее решение

Ответ №2:

Попробуй

   var baselist = [1, 5, 7];

  var swlist = ['sw1', 'sw2', 'sw3'];

  var getlist = ['on', 'off', 'on',
    'off', 'on', 'off',
    'on', 'off', 'on'];

  Map finalMap = {};

  int start = 0;
  for (var base in baselist) {
    Map<String, String> inner = {};

    swlist.asMap().forEach((key, value) {
      inner[value] = getlist[start   key];
    });

    finalMap[base] = inner;
    start  = 3; // next 3 for getlist
  }
  print(finalMap);