如何通过索引同步删除列表中的元素



我有一个List的卡片,Card是一个类。我有三手牌,每手牌发四张牌。

在游戏里面的onTouchEvent我必须删除触摸卡时,它是在MotionEvent.ACTION_UP,问题是:

,如果一手牌中可用的牌号如下:100,130,112,70,索引分别为0,1,2,3。当我想要删除被触摸的卡片索引重新洗牌,例如,

(100,130,112,70)->(0,1,2,3) delete(1)==>130 will be deleted

(100,112,70)->(0,1,2) delete (2) ==> 70 will be deleted and NOT 112.

(100,112)->(0,1) delete (3) ==> an OUT_OF_BOUND exception will be thrown.

如何避免这种情况,我尝试通过参考列表中每个元素的比例来删除元素,但这很复杂。

参见SparseArray(有很多)…如果我说对了,这正是你所需要的。它基本上是一种哈希映射,但它的开销更小

使用您当前的实现,您可以简单地从列表中从最高索引开始删除,移动到最低索引:

(100,130,112,70)->(0,1,2,3) delete(3)==>70 will be deleted.
(100,130,112)->(0,1,2) delete (2) ==> 112 will be deleted.
(100,130)->(0,1) delete (1) ==> 130 will be deleted.

然而,您最好将您的卡片存储在Map或ID to cards中。这样,您就可以简单地按ID删除,而不用担心它的索引。

您可以在Map内部存储卡片-这样,键(索引)将保持不变。

然而,选择要删除的卡片的索引的逻辑是可疑的——当只有两张卡片时,为什么你的代码想要删除索引3,为什么当你想删除索引1上的卡片时,索引2被选中?

最新更新