亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么擴展函數不適用于 ArrayList<ArrayList<Double>>

為什么擴展函數不適用于 ArrayList<ArrayList<Double>>

眼眸繁星 2024-01-05 17:06:10
我對 Kotlin 的 Android 開發非常陌生。我有一個 ArrayList,由兩個 Double 類型的 ArrayList 組成。我想丟棄/切片 Big ArrayList 中第一個元素之后的所有內容。在遇到Kotlin 頁面上描述的屬性時,我發現了一些函數,例如等dropLast。take但是,它們在實現上不執行,也沒有錯誤。我仍然得到與具有相同長度的輸入相同的輸出。add盡管, getunder column等功能Functions運行良好。我肯定在這里遺漏了一些東西。實現這一目標的方法是什么?下面是一個虛擬代碼:-fun padding(tokenizedinput : ArrayList<ArrayList<Double>>) : ArrayList<ArrayList<Double>> {    var temp_storage = tokenizedinput // of size 2    temp_storage.take(1) // OPTION 1. Only want to have first element in this ArrayList    temp_storage.dropLast(1) // OPTION 2. Only want to drop 1 element from the end    println("FInal size: "+ temp_storage.size) //still size 2. Why not 1!?    return temp_storage}
查看完整描述

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>>回復


查看完整回答
反對 回復 2024-01-05
?
一只萌萌小番薯

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



查看完整回答
反對 回復 2024-01-05
?
紫衣仙女

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


這意味著它返回一個列表,它不會修改原始集合


查看完整回答
反對 回復 2024-01-05
  • 3 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號