#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 = 0you 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);