【问题标题】:Flex/ActionScript: How to copy ListCollectionView variable by value (rather than reference)?Flex/ActionScript:如何按值(而不是引用)复制 ListCollectionView 变量?
【发布时间】:2012-06-27 06:20:48
【问题描述】:

如何通过值(而不是引用)将 ListCollectionView 变量复制到新的 ListCollectionView 变量中?

也就是说,对新 ListCollectionView 变量的更改不应影响原始 ListCollectionView 变量(反之亦然)。

最终目标是让 2 个 ListCollectionView 变量指向同一个 ArrayList,但更新一个 ListCollectionView 变量不会影响另一个 ListCollectionView 变量。

更新 1

这是我发现的一种方法,虽然我不确定它是最干净还是最有效的方法。

LCV2=new ListCollectionView(new ArrayList());
for (var ii:int=0; ii<LCV1.length; ii++) {
    var item:Object=LCV1[ii];
    LCV2.list.addItem(item);
}

【问题讨论】:

  • 你如何陈述这个问题是完全不可能的,因为你们都希望它指向相同的底层列表/对象,但你不希望通过一个对这些底层对象进行的修改被反映另一个。您必须“深拷贝”,即克隆底层列表中的所有对象,并提供该深拷贝列表作为另一个 ListCollectionView 的参数,以防止它们相互修改。
  • 也许我的措辞不正确。对 ArrayList 的更改反映在两个 ListCollectionView 变量中。但是,对一个 ListCollectionView 变量(例如 removeAll())的更改不会影响另一个 ListCollectionView 变量。我从一个 ListCollectionView 变量开始,我需要第二个 ListCollectionView 变量,它以与第一个 ListCollectionView 变量相同的列表开始,但此后独立运行。
  • 啊,好吧,在那种情况下,你说得对,对不起,我误解了你的意思......所以我认为你可以 listCollection2.addAll(listCollection1.list);我会写在答案中
  • 我最初读的太多了,假设您的意思是通过集合视图引用基础对象所做的更新不会反映在其他集合视图中,这需要深层复制.很抱歉疏忽了。

标签: actionscript-3 apache-flex


【解决方案1】:
listCollection1 = new ListCollectionView(event.result); //populate your first list however

listCollection2 = new ListCollectionView(); //create a new ListCollectionView that isn't related to the first
listCollection2.addAll(listCollection1.list); //add all the items from the first list to the second

【讨论】:

  • 感谢 Shaunhusain,看来listCollection2.addAll(listCollection1.list); 解决方案工作正常。但是,listCollection2.list = listCollection1.list; 解决方案仍然将两个 ListCollectionView 链接在一起(一种变化会影响另一种)。当然,我只需要一个解决方案,您的第一个解决方案比我在上面更新 1 中找到的解决方案更加清晰和简洁。谢谢!!!
  • @ggkmath 酷我将删除答案的另一部分,然后感谢您的反馈
  • 我发现我经常不得不使用listCollection2=new ListColectionView(new ArrayList()); 来避免 FlashBuilder 编译时错误。
  • 在最近的 Flex 版本中,这会导致索引超出范围异常。您可以通过复制内部列表来解决此问题:listCollection2.list = [create copy from listCollectionView1.list]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2013-09-13
  • 2018-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 2011-02-03
相关资源
最近更新 更多