Как я могу получить название списка, который я установил сам?

#flutter #dart

Вопрос:

У меня есть такой необработанный список:

    var listRaw = [
    {
      "listName": "listA",
      "listValue": [1, 2, 3]
    },
    {
      "listName": "listB",
      "listValue": [4, 5, 6]
    },
    {
      "listName": "listC",
      "listValue": [7, 8, 9]
    }
  ];
 

и пустые списки, подобные этому:

   List<int> listA = [];
  List<int> listB = [];
  List<int> listD = [];

  List<List<int>> listFilled = [listA, listB, listD];
 

Как я могу получить имена пустых списков в качестве условия для добавления listVaule в listRaw них, если имя пустого списка == listName ? => >тогда listFilled будет результат [[1,2,3], [4,5,6], []]

Так что, пожалуйста, помогите мне, это мой код до сих пор

 void main() {
  var listRaw = [
    {
      "listName": "listA",
      "listValue": [1, 2, 3]
    },
    {
      "listName": "listB",
      "listValue": [4, 5, 6]
    },
    {
      "listName": "listC",
      "listValue": [7, 8, 9]
    }
  ];

  List<int> listA = [];
  List<int> listB = [];
  List<int> listD = [];

  List<List<int>> listFilled = [listA, listB, listD];

  listRaw.forEach((r) {
    listFilled.forEach((f) {
      if (r['listName'] ==  ___ ) { // How to get name of (f)
        f.addAll(r['listValue']);
      }
    });
  });

  print(listFilled); // want result: [[1,2,3], [4,5,6], []]
}
 

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

1. ввод listA , listB и listD в listFilled добавит только элементы этих трех списков filledList , а не его название.

Ответ №1:

Имена переменных, которые вы используете, предназначены для того, чтобы вы понимали, для чего используется переменная. Компилятор не знает, как вы их назвали. Он знает только, что эта переменная указывает на определенную точку памяти.

Тем не менее, все, что вы можете сделать, это создать свой собственный подкласс List класса, к которому будет прикреплено имя. Таким образом, вы можете проверить название списка, когда захотите его сравнить. Ваш подкласс должен быть примерно таким

Это не точный синтаксис. Просто обзор того, что нужно сделать.

 class MyNamedList extends List {
    String name;

    MyNamedList(String name) {
        this.name = name;
    }
}

//You can check for name like this
if (r['listName'] == myNamedListObj.name)
 

Ответ №2:

 var listRaw = [
    {
      "listName": "listA",
      "listValue": [1, 2, 3]
    },
    {
      "listName": "listB",
      "listValue": [4, 5, 6]
    },
    {
      "listName": "listC",
      "listValue": [7, 8, 9]
    }
  ];
 

это список карт<Строка, динамическая>

итак,что вам нужно сделать,это создать пустой список<Карта<Строка, динамическая><Строка, динамическая>>

 List<Map<String,dynamic>> list = List.empty(growable:true);//set false if size is fixed.
 

Затем List<List<Map<String,dynamic>>> listFilled = [list1,list2,list3];