【发布时间】: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