gpt4 book ai didi

kotlin - 是否有一种更有效的方式以某种方式将项目列表映射到成对列表?

转载 作者:行者123 更新时间:2023-12-02 13:31:51 25 4
gpt4 key购买 nike

源数据:Array

目标返回数据:List >

源数据(Array )包含一本书的jpeg列表,形式为(Scan0001.jpg,Scan0002.jpg,...,Scan000n.jpg)。第一个文件(Scan0001.jpg)始终是书的封面,最后一个文件(Scan000n.jpg)始终是书的封面。以下代码段中的变量文件是Array ,它仅包含Scanxxxx.jpg形式的jpeg文件。

我要使用以下规则创建页面的文件对:

1)封面(正面,背面)应始终为Pair (文件分别为Scan0001.jpg,Scan000n.jpg)

2)如果非覆盖页面不均匀(意味着最后一页没有配对),则应该为Pair (文件为Scan000n-1.jpg)

3)封面应始终是第一个文件对,背面应始终是最后一个文件对

以下代码有效,但我认为在更高效或更干净的代码方面仍有改进的空间

val files = selectedFolder.listFiles()
val preliminaryResult = files.toMutableList()
val result = mutableListOf<Pair<File?,File?>>()

result.add(Pair(preliminaryResult.first(),null))
preliminaryResult.removeAt(0)

result.add(Pair(preliminaryResult.last(),null))
preliminaryResult.removeAt(preliminaryResult.size-1)

result.addAll(preliminaryResult.map{
if(preliminaryResult.indexOf(it) % 2 == 0) {
Pair(it,preliminaryResult.getOrNull(preliminaryResult.indexOf(it)+1))
} else {
Pair(null,null)
}
})

result.removeAll{
it == Pair(null,null)
}

result.add(result[1])
result.removeAt(1)

最佳答案

您可以先插入所需的空值,以便可以不间断地使用zipWithNext

val result = selectedFolder.listFiles().toMutableList<File?>().apply {
add(1, null) // for front cover
if (0 == size % 2)
add(size - 1, null) // for odd inner last page
add(null) // for back cover
}.zipWithNext()
.run { slice(indices step 2) }

关于kotlin - 是否有一种更有效的方式以某种方式将项目列表映射到成对列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60749879/

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