【问题标题】:Remove List elements marked on SparseBooleanArray删除 SparseBooleanArray 上标记的 List 元素
【发布时间】:2014-07-02 20:46:28
【问题描述】:

所以基本上我在List 有一个必须删除的位置数组。我们都知道我们不能使用for循环,因为一旦你删除了第一个,其余项目的位置就会更新,所以解决方案是使用Iterator

我的SparseBooleanArray 具有列表中位置的键和 **value(布尔值)来指示是否应将其删除。

如何删除它们?

编辑:

// list is a List
list.get(0) // first element
list.get(1) // second element
list.get(2) // third element

// sba is a SparseBooleanArray
// the first element of the sea indicates that the list.get(1) should be deleted
sba.keyAt(0)   // = 1
sba.valueAt(0) // = true  

【问题讨论】:

  • 你可以使用for循环,你只需要在删除元素时调整递增变量
  • 我假设有问题的语言是 Java...?
  • 您可能会提供一些代码,以便其他人可以更清楚地了解您迄今为止所尝试的内容
  • 是的,语言是java。还更新以提供更直观的解释。我实际上是在尝试删除 android 上的上下文操作栏上的选定项目,但找不到如何做到这一点。其他帖子只是说如何获取检查的项目,所以这就是我卡住的地方
  • 查看docs(developer.android.com/reference/android/util/…),看起来SparseBooleanArrays 有一个delete 方法,它采用key 值,并删除该位置的值。

标签: java list iterator


【解决方案1】:

正如 OP 所解释的,您必须使用迭代器。

以下是实际工作代码。在更简单的场景中,您将只部署内部循环:

ArrayList<ArrayList<Object>> fldData;       // Mass data
        
/** De-clutter the mass data arrays according to the SparseBooleanArray */
public void de_clutter(SparseBooleanArray sba) {
    for (ArrayList<Object> objArray: fldData) {
        int ix = -1;
        for (Iterator<Object> iter = objArray.iterator(); iter.hasNext(); ) {
            iter.next();
            ix++;
            if (!sba.get(ix, true)) { iter.remove(); }
        }
    }
}
     

【讨论】:

    猜你喜欢
    • 2018-06-14
    • 2010-10-11
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多