3 回答
TA贡献2003条经验 获得超2个赞
temp_storage.take(1)
这将返回修改后的List
. 它不会修改List
您调用它的位置。您忽略了返回值。
temp_storage.dropLast(1)
同样的——你忽略了该函数正在做的工作。
println("FInal size: "+ temp_storage.size) //still size 2. Why not 1!?
它的大小相同,因为您没有对它进行任何修改。
实现这一目标的方法是什么?
如果我明白你想要什么,请使用:
fun padding(tokenizedinput : ArrayList<ArrayList<Double>>) = arrayListOf(tokenizedinput[0])
在这里,我们:
获取 tokenizedinput 的第一个元素
将其包含在 中
ArrayList
,因为您想要ArrayList<ArrayList<Double>>
回复
TA贡献1795条经验 获得超7个赞
List.take(n)
或者List.dropLast(n)
将return
使用该操作创建一个新列表。它不会修改现有列表。尝试以这种方式记录或打印:-
println(temp_storage.take(1).size) // would be 1 println(temp_storage.dropLast(1).size) // would be 1
上面的输出将是
1
,当且仅当列表的大小是2
要转换为现有列表,请使用:-
temp_storage = ArrayList(temp_storage.dropLast(1)) // need to cast it to ArrayList<T> before assigning
TA贡献1839条经验 获得超15个赞
要添加其他答案已经说过的内容,请从包含此方法的实际类中添加:
采取方法:
/**
* Returns a list containing first [n] elements.
*
* @throws IllegalArgumentException if [n] is negative.
*
* @sample samples.collections.Collections.Transformations.take
*/
public fun <T> Iterable<T>.take(n: Int): List<T> {
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (this is Collection<T>) {
if (n >= size) return toList()
if (n == 1) return listOf(first())
}
var count = 0
val list = ArrayList<T>(n)
for (item in this) {
if (count++ == n)
break
list.add(item)
}
return list.optimizeReadOnlyList()
}
还有dropLast:
/**
* Returns a list containing all elements except last [n] elements.
*
* @throws IllegalArgumentException if [n] is negative.
*
* @sample samples.collections.Collections.Transformations.drop
*/
public fun <T> List<T>.dropLast(n: Int): List<T> {
require(n >= 0) { "Requested element count $n is less than zero." }
return take((size - n).coerceAtLeast(0))
}
可以在以下位置找到:_Collections.kt
这意味着它返回一个列表,它不会修改原始集合
添加回答
举报