将Pair
转换为List
是一种惯用方法:
Pair(a, b).toList()
不,我正在寻找相反的过程。我最好的方法是这样的:
Pair(list[0], list[1])
我的问题是我需要先在代码中设置一个List
值才能使其生效。我会喜欢这样的事情:
listOf(a, b).toPair()
答案 0 :(得分:7)
对于更通用的解决方案,您可以使用扩展函数zipWithNext
*
返回此集合中每两个相邻元素的对的列表。
文档中的示例更好地解释了它:
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="SitePhysicalPath" value="E:\Program Files (x86)\Acumatica ERP\960 Instances\AcumaticaIntegrations"/>
<add key="GenResultPath" value="C:\SDK\ClassGenerator\Out"/>
<add key="Username" value="admin@Company"/>
<add key="Namespace" value="GeneratedWrappers.Acumatica"/>
<add key="ClearOutput" value="true"/>
<add key="FilenameFilter" value="CS100000, CS102000, CM202000, GL201500, CS202000, GL202500, GL102000, GL101000, GL201000"/>
<!--<add key="PagesList" value="list.txt"/>
<add key="PagesListAttribute" value="exclude"/>
<add key="PagesListAttribute" value="include"/>
<add key="PagesParameters" value="ParamsPP.txt"/>
<add key="GenericInquiryParameters" value="ParamsGI.txt"/>-->
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/>
</startup>
</configuration>
*请注意,此功能自Kotlin v1.2起可用。
答案 1 :(得分:4)
您可以为自己制作此扩展程序:
fun <T> List<T>.toPair(): Pair<T, T> {
if (this.size != 2) {
throw IllegalArgumentException("List is not of length 2!")
}
return Pair(this[0], this[1])
}
错误处理取决于您,在Pair<T, T>?
长度不正确的情况下,您还可以返回null
并返回List
。你也可以只检查它至少有2个元素,而不是要求它只有2个。
用法如您所述:
listOf(a, b).toPair()
答案 2 :(得分:0)
答案 3 :(得分:0)
这是@ zsmb13解决方案的一种变体,它避免显式创建异常并按索引取消引用列表:
fun <T> List<T>.toPair(): Pair<T, T> {
require (this.size == 2) { "List is not of length 2!" }
val (a, b) = this
return Pair(a, b)
}