我有List
张卡片,Card
是一个班级。而且我有三只手,每只手都被交给四张牌。
在onTouchEvent
内的游戏中我必须在MotionEvent.ACTION_UP
内删除被触摸的卡,问题是:
如果手中的可用卡ID如下:100,130,112,70,各自的余数:0,1,2,3。当我想删除被触摸的卡时,indeces重新洗牌,例如,
(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.
如何避免这种情况,我试图通过参考列表中的每个元素比例来删除元素,但它很复杂。
答案 0 :(得分:2)
请参阅SparseArray(其中有很多)...如果我找到了你正确的你需要的东西。 它基本上是一种哈希映射,但它的开销较小。
答案 1 :(得分:1)
使用您当前的实现,您只需从最高索引开始的列表中删除,移至最低位置:
(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中可能会更好。这样你就可以简单地通过ID删除而不必担心它的索引。
答案 2 :(得分:0)
您可以在内部将卡存储在地图中 - 这样,键(索引)将保持不变。
但是,选择要删除的卡索引的逻辑是可疑的 - 当你只想删除2张卡时,为什么你的代码想要删除索引3?当你想删除索引1上的卡时,为什么选择索引2? / p>