var arrayone: ArrayList<String> = arrayListOf("a","b","c")
val arraytwo:ArrayList<String> = arrayListOf(arrayone.removeAt(0))
for (item in arraytwo) {
println(item)
}
我只想从第一个数组中删除项目并创建一个新数组。但这只是在索引0打印一个项目
最佳答案
removeAt(0)
从第一个列表中删除第一个元素并返回它。然后 arrayListOf
使用该删除的项目创建一个新的(第二个)列表。
然后arrayone
包含:b
和c
。 arraytwo
然后包含a
。
如果您不想触摸第一个列表,并且只想将其余项添加到新列表中,则可能要使用 drop
,例如:
var arrayone: ArrayList<String> = arrayListOf("a","b","c")
val arraytwo = arrayone.drop(1)
for (item in arraytwo) {
println(item) // now prints all except the first one...
}
// arrayone contains: a, b, c
// arraytwo contains: b, c
或者,如果您只想删除最后一项,请使用
dropLast(1)
。或使用 dropWhile
/ dropLastWhile
(如果您有条件申请并删除所有直到/直到该条件)...如果您确实要从第一个列表中删除项目,并且仅将已删除的项目添加到第二个列表中,那么您当前的方法是可以的。但是,如果您想删除特定索引处的项目并有一个新列表而不是仅包含未删除的项目,则需要先构造第一个列表的副本,然后将
removeAt
应用于该列表,例如:val arraytwo = arrayone.toMutableList().apply {
removeAt(0)
}
// or without the apply:
arraytwo.removeAt(0)
或者,您可以使用
filterIndexed
解决该问题:val arraytwo = arrayone.filterIndexed { index, _ ->
index != 1 // you can also specify more interesting filters here...
} // filter, map, etc. all return you a new list. If that list must be mutable again, just add a .toMutableList() at the end
通过使用
filterIndexed
,filter
,drop
等,您可以确保第一个列表保持不变。如果您不想首先触摸第一个列表,则可能希望使用 listOf
或 toList
,即仅将 List
作为类型,而不公开可变函数(也请检查Kotlin reference regarding Collections: List, Set, Map)。也许您也对
filter
/ filterNot
感兴趣,然后很快对 minus
或类似函数删除了没有索引的不需要的项目。
关于arrays - 如何从Kotlin中的ArrayList中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52533475/