1. 简介

在 Kotlin 开发中,数组是一个非常常见的数据结构。而查找某个元素在数组中的索引,是开发过程中经常遇到的任务之一。无论是初学者还是有经验的 Kotlin 开发者,掌握这些查找方法都非常有必要。

本文将介绍多种在 Kotlin 中查找数组元素索引的方法,并附有示例代码说明,方便你在实际开发中灵活使用。

2. 使用 indexOf() 方法

indexOf() 是查找元素索引最直接的方法。它会返回第一个匹配元素的索引,如果未找到则返回 -1

✅ 适用于查找第一个出现的元素。

@Test
fun `Find index using indexOf`() {
    val numbers = arrayOf(1, 2, 3, 4, 5)
    val elementToFind = 3

    val index = numbers.indexOf(elementToFind)

    assertEquals(2, index)
}

3. 使用 indexOfFirst() 方法

indexOfFirst() 允许我们通过一个 lambda 表达式来定义查找条件,返回第一个满足条件的元素索引,找不到则返回 -1

✅ 适用于需要条件判断的查找场景。

@Test
fun `Find index of first`() {
    val numbers = arrayOf(1, 2, 3, 4, 3, 5)
    val elementToFind = 3

    val index = numbers.indexOfFirst { it == elementToFind }

    assertEquals(2, index)
}

4. 使用 lastIndexOf() 方法

lastIndexOf() 类似于 indexOf(),但它是从后往前查找,返回最后一个匹配元素的索引,找不到则返回 -1

✅ 适用于查找最后一个出现的元素。

@Test
fun `Find last index of element`() {
    val numbers = arrayOf(1, 2, 3, 4, 3, 5)
    val elementToFind = 3

    val lastIndex = numbers.lastIndexOf(elementToFind)

    assertEquals(4, lastIndex)
}

5. 使用 indexOfLast() 方法

indexOfLast()indexOfFirst() 类似,但它是查找最后一个满足条件的元素索引,找不到则返回 -1

✅ 适用于需要条件判断并查找最后一个匹配项的场景。

@Test
fun `Find index of last`() {
    val numbers = arrayOf(1, 2, 3, 4, 3, 5)
    val elementToFind = 3

    val index = numbers.indexOfLast { it == elementToFind }

    assertEquals(4, index)
}

6. 使用循环手动查找

当我们需要查找所有匹配元素的索引时,可以使用循环遍历数组进行查找。

✅ 适用于查找多个匹配项的场景。

@Test
fun `Find indices using loop`() {
    val numbers = arrayOf(1, 2, 3, 4, 3, 5)
    val elementToFind = 3

    val indices = mutableListOf<Int>()

    for (i in numbers.indices) {
        if (numbers[i] == elementToFind) {
            indices.add(i)
        }
    }

    assertEquals(listOf(2, 4), indices)
}

7. 总结

在 Kotlin 中查找数组元素的索引有多种方式,选择哪一种取决于具体使用场景:

方法名称 说明 是否支持条件判断 是否查找所有匹配项
indexOf() 查找第一个匹配项
indexOfFirst() 查找第一个满足条件的元素
lastIndexOf() 查找最后一个匹配项
indexOfLast() 查找最后一个满足条件的元素
loop 手动遍历数组查找所有匹配项

⚠️ 踩坑提醒:所有方法在找不到元素时都返回 -1,记得做判断处理,避免空指针或逻辑错误。

如需查看完整示例代码,欢迎访问 GitHub 仓库


原始标题:Find the Index of an Element in a Kotlin Array