簡體   English   中英

如何在每個元素后將集合轉換為帶有逗號的數組,而不在 kotlin 中分配新的 memory?

[英]How to transform a Set into an Array with commas after each element without allocating new memory in kotlin?

場景如下:

fun scenario(names:Set<String>){
log( /here comes the transformed set );
}

重要的是要提到 log 接收 object 類型的可變參數類型。

我嘗試的是以下內容:*names.toTypeArray()。

這樣做的問題是,除了為新列表分配新空間外,它還遺漏了所需的逗號

我想要實現的是:運行時的 log("John", ",", "John", etc...)。

你可以試試這個。

val arr :Array<String> = (names.chunked(1) // Chunking set into 1 element lists
    .flatMap { it.plus(",") } // Adding comma next to each elements and flatten the list
    .toList() as ArrayList) // Type casting to arraylist
    .also { it.removeLast() } //Removing comma after last element
    .toTypedArray() // Converting to array
someFun(*arr) // Passing array as vararg

如果要保持插入順序,這里要記住一件事,名稱集應該是LinkedHashSet 。因為 TreeSet、HashSet 等順序集不保持順序。

fun someFun(vararg a: String) {
    a.forEach {
        print(it)
    }
}

注意:這只是一個慣用的解決方案。 盡管我們在這里沒有使用額外的空間,但它在內部確實創造了額外的空間。

希望能幫助到你。 鏈接到 Kotlin 游樂場。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM