gpt4 book ai didi

android - 我可以在多个线程中从 kotlin 集合中拆分 mapIndexed 工作吗?

转载 作者:行者123 更新时间:2023-11-29 14:58:24 24 4
gpt4 key购买 nike

我在为我的应用问题寻找解决方案时遇到了一些困难。
我的应用程序正在生成包含一百万个点的图表,为此我正在保存一个字符串,其中所有点都由房间数据库中的空格分隔。

话虽这么说,我正在加载这个点字符串,将其拆分并使用 mapIndex 为所有点添加索引,如下所示:

val map = mutableMapOf<Float, Float>()
signal.split(" ").mapIndexed { index, signal ->
signal.toFloatOrNull()?.let { floatSignal ->
map[index.toFloat()] = floatSignal
}
}

使用这段代码我可以在图表上显示所有点,但是这个操作 mapIndexed 在处理一百万个点(超过三秒)时太慢了
我的问题是,有没有办法在多线程上拆分 mapIndexed 然后加入结果?对不起,如果它有点难以理解,我不是母语人士

最佳答案

您可以结合使用 chunked 和协程:

  • chunked 将列表分成几部分
  • async 启动一个新的协程
  • awaitAll 等待协程完成
  • flattenPairs 的 block 合并到一个列表中
  • toMap 将对列表转换为新的 Map

请注意,runBlocking 仅用作创建协程作用域的示例。

runBlocking(Dispatchers.Default) {
val chunkSize = 10000
val map = signal.split(" ").chunked(chunkSize).mapIndexed { chunkIndex, chunk ->
async {
chunk.mapIndexedNotNull { index, signal ->
signal.toFloatOrNull()?.let { floatSignal ->
(chunkIndex * chunkSize + index).toFloat() to floatSignal
}
}
}
}.awaitAll().flatten().toMap()
}

关于android - 我可以在多个线程中从 kotlin 集合中拆分 mapIndexed 工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112801/

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