我有一个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被选中?