[英]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.