Flutter Advanced: copia profunda y superficial de la matriz List

  • copia superficial: puntero de copia
  • Copia profunda: copiar un nuevo objeto

El problema con la copia superficial : operar una matriz y otra matriz también cambia

Lista lista = ['1', '2', '3', '4', '5'];
Lista copiaLista = lista;
copiaLista[0] = 'abc';
print(lista);///Imprimir: [ abc,2,3,4,5]
imprimir(copiarLista);///imprimir: [abc,2,3,4,5] 

1. La solución al problema anterior: use deep copy list.from()

Lista lista = ['1', '2', '3', '4', '5'];
Lista copyList = List.from(list);
copiarLista[0] = 'abc';
print(list);///打印: [1,2,3,4,5]
print(copyList);///打印: [abc,2,3,4,5] 

pista:

  1. Solo los tipos como int String se almacenan en la Lista, que se pueden usar para List.fromregenerar una nueva Lista
  2. Si el almacenamiento en Lista es Mapa o Modelo, useList.from也会出现问题,

2. El objeto HomeModel se almacena en la Lista, debe llamar al mapa transversal y luego llamar al método toList() para hacer una copia profunda

copyList = list
        .map((e) => HomeModel.fromJson(e.toJson()))
        .toList();

 

 

3. Cuando el objeto Mapa se almacena en la Lista para recorrer cada objeto, se debe llamar al método Map.from(item) para hacer una copia profunda

Lista lista = [{'etiqueta': '1'}, {'etiqueta': '2'}];
Lista copyList = copyWithList(lista);
copiarLista[0]['etiqueta'] = 'abc';
print(list);///打印:[{tag: 1}, {tag: 2}]
 
print(copyList);///打印:[{tag: abc}, {tag: 2}]

 el código se muestra a continuación:

  List copyWithList(List list) {
    List copyList = [];
    for (var item in list) {
      if (item is Map) {
        copyList.add(Map.from(item));
      } else if (item is List) {
        copyList.add(copyWithList(item));
      } else {
        copyList.add(item);
      }
    }
    return copyList;
  }

 

 

Supongo que te gusta

Origin blog.csdn.net/RreamigOfGirls/article/details/131247643
Recomendado
Clasificación