gpt4 book ai didi

arrays - 将数组映射到 kotlin 对象列表

转载 作者:行者123 更新时间:2023-12-02 17:06:22 25 4
gpt4 key购买 nike

我想知道将多个数组映射到一个对象列表的方法。

我的意思是例如我有

val a = arrayOf("A1","A2","A3")
val b = arrayOf("B1","B2","B3")

data class SomeClass(val v1:String, val v2:String)

我想以优雅的方式解析它以获得这样的列表:

val list = listOf(SomeClass("A1","B1"),SomeClass("A2","B2"),SomeClass("A3","B3"))

我假设它们的长度相同。我想到的唯一办法是:

val list = mutableListOf<SomeClass>() 
for (i in a.indices)
array.add(SomeClass(a[i],b[i])

是否有更好、更优雅的解决方案(也许使用 Collections.zip 或 Array.map)?

最佳答案

尝试Array.zip然后 map :

val list = a.zip(b)
.map { SomeClass(it.first, it.second) }

或者如果您更喜欢它:

val list = a.zip(b)
.map { (a, b) -> SomeClass(a, b) }

请注意,如果两个数组的大小不同,则附加值将被忽略。另请注意,这将创建中间 Pair(这是 zip 的默认转换函数)。尽管我更喜欢显式 map ,但关于重载方法的 @hotkeys 解决方案更合适(您可以节省隐藏的 Pair 转换):

val list = a.zip(b) { a, b -> SomeClass(a, b) }

重载方法可能大放异彩的地方是使用引用来代替:

a.zip(b, ::SomeClass)

只要您有一个与压缩参数匹配的构造函数,它就可以工作,并且对于 Pair 来说还不能开箱即用(还?)。

关于arrays - 将数组映射到 kotlin 对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51766354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com