【问题标题】:How to make copy of array's elements in the dart如何在飞镖中复制数组元素
【发布时间】:2020-10-30 23:40:23
【问题描述】:

如果更改另一个数组的值,则已更改主数组等有线问题。我认为问题是关于复制相同的地址,不确定但只是想到它。我已经尝试了过去 3 个小时,但无法摆脱它。

请看下图以获得更好的想法。

List<page> _pageList;
List<page> _orderList = [];
_pageList = _apiResponse.result as List<page>;
_orderList.add(_pageList[0].element);
_orderList[0].title = "XYZ" 
//--> Here if I change the `_orderList[0].title` then it also change the `title` inside "_pageList" 

如何防止主数组发生变化?

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    我在我的一个项目中遇到了同样的问题。我所做的是,使用json 对对象进行编码和解码,以帮助您复制对象,以免影响到主列表。

    在代码的第 3 行之后,进行如下更改

    Elements copyObject = Elements.fromJson(_pageList[0].element.toJson());
    // First of all you have to convert your object to the Map and and map to original object like above
    _orderList.add(copyObject);    
     
    

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用 getter 函数来创建列表的副本并使用它来代替 改变你的实际清单。 示例:

      List<Page> get orderList{
      return [..._orderList];
      }
      

      【讨论】:

        【解决方案3】:

        Dart 存储引用中复杂类型的列表,因此这是预期行为。

        来自您的代码:

        _orderList.add(_pageList[0].element);

        _orderList[0]_pageList[0].element 指向同一个引用(如果它们是非原始的)。

        据我所知,dart 中没有通用的copy()clone() 方法。所以如果你想要一个单独的实例,你需要自己复制对象。 (见this question

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-21
          • 1970-01-01
          • 1970-01-01
          • 2014-12-04
          • 2021-09-20
          • 1970-01-01
          相关资源
          最近更新 更多