将 Kotlin 中的两个列表与索引结合起来

Combining Two List in Kotlin with Index

有一个数据class是水果

data class Fruits(
    val code: String, //Unique
    val name: String
)

带有布尔变量的基本列表索引项如下。

val indexList: MutableList<Boolean> = MutableList(baseFruitList.size) { false }

现在最喜欢的索引列表如下

val favList: MutableList<Boolean> = MutableList(favFruitList.size) { true}

我想要一个综合的完整列表,其中最喜欢的项目基本上显示为 true。

Ex: 
baseFruitList = {[FT1,apple],[FT2,grapes],[FT3,banana],[FT4,mango],[FT5,pears]}
favList = {[FT2,grapes],[FT4,mango]}

最终的索引列表应该有

finalIndexed = {false,true,false,true,false}

我们如何在 Kotlin 中实现而不遍历每个元素。

你可以做到

val finalIndexed = baseFruitList.map { it in favList }

假设,就像@Tenfour04 所要求的那样,name 保证是特定 code 的特定值(包括匹配大小写)(因为该组合是数据 class 匹配另一个,例如检查它是否在另一个列表中)

如果你不能保证,这个更安全:

val finalIndexed = baseFruitList.map { fruit ->
    favList.any { fav.code == fruit.code }
}

但在这里您必须遍历所有收藏(至少在找到匹配之前)以查看是否有代码。

但实际上,如果 code 是此处的唯一标识符,为什么不将它们存储在您的 favList 中?

favList = listOf("FT2", "FT4") // or a Set would be more efficient, and more correct!
val finalIndexed = baseFruitList.map { it.code in favList }

我不知道你所说的“不遍历每个元素”是什么意思 - 如果你的意思是没有明确的索引 for 循环,那么你可以像我在这里一样使用这些简单的函数。但总会涉及一些迭代。集合始终是帮助您最大程度减少这种情况的一种选择