kotlin - 嵌套数组indexOf()

标签 kotlin

这里是 Kotlin 新手 --

有没有一种“更简洁”的方法来做到这一点? (我的 int 值保证在整个集合中是唯一的)

fun main() {
    val sect = arrayOf(arrayOf(1, 2, 3), arrayOf(4, 5), arrayOf(6, 7, 8, 9))
    val (i1, i2) = deepIndexOf(sect, 6)
    println("$i1 - $i2")
}
fun deepIndexOf(a: Array<Array<Int>>, x: Int): Pair<Int, Int> {
    for ((i1, sub) in a.withIndex()) {
        val i2 = sub.indexOf(x)
        if (i2 > -1) return i1 to i2
    }
    return -1 to -1
}

最佳答案

fun deepIndexOf(a: Array<Array<Int>>, x: Int): Pair<Int, Int> {
  return a
    .mapIndexed { index, ints -> index to ints.indexOf(x) }
    .firstOrNull { (_, found) -> found != -1 }
    ?: (-1 to -1)
}

编辑:根据下面@Alex.T的评论,这是一个不处理整个输入列表的解决方案:

fun deepIndexOf(a: Array<Array<Int>>, x: Int): Pair<Int, Int> {
  return a
    .withIndex()
    .dropWhile { (_, ints) -> ints.indexOf(x) == -1 }
    .map { (index, ints) -> index to ints.indexOf(x) }
    .getOrElse(0) { -1 to -1 }
}

关于kotlin - 嵌套数组indexOf(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71551166/

相关文章:

java - Gson Map<String, Any> 到对象

android - 如何在 Espresso 测试中获取 View 的标签?

java - 不幸的是 MyApp 已停止。我该如何解决这个问题?

Android Studio : unresolved reference for java and javax imports, 但项目编译

stream - RxJava - 将 Observable 转换为迭代器、流或序列

java - Android获取当前时间戳?

android - 如何进行 API 调用。我是初学者

android - Koin: NoBeanDefFoundException, 检查你的模块定义

class - Kotlin 类初始化语义是什么?

gradle - IntelliJ项目 “JS Client and JVM Server | Gradle”不起作用