我正在尝试使用一组二维数组来提取数据。我试图在数组中找到 String 对象的索引,并使用该索引从同一行但单独的列中提取数据,这样我就不需要为我需要的每一个数学部分提供一个由 16 个 if 循环组成的庞大链.
这是代码片段。
@Composable
fun TimeCalculation(
songVar: String, // songVar is a string that changes from another composable
arrayOfSongs: kotlin.Array<kotlin.Array<String>>
) {
if (songVar != "") {
val index = arrayOfSongs.indexOf(songVar) // <-- Error on 'indexOf'
} else {
var time1 = 0.0
}
arrayOfSongs 上面初始化如下:
val arrayOfSongs = rememberSaveable { // no errors here
arrayOf(
arrayOf("songTitle1", "3.46"),
arrayOf("songTitle2", "4.22"),
// more code for a longer array follows
我将数组发送到可组合项,如下所示:
TimeCalculation(
songVar, arrayOfSongs) // no errors here
最初,我在可组合项中声明了 arrayOfSongs 数组,但遇到了相同的错误。
IDE 显示的错误消息有点令人困惑:
类型推断失败。类型参数 T 的值应该在输入类型(参数类型、接收者类型或预期类型)中提及。尝试明确指定它。
实际问题是
arrayOfSongs
的元素与您传递给 indexOf()
的参数之间存在类型不匹配。 arrayOfSongs
中的每个元素都是一个数组,但您试图传递一个简单的 String
。
如果您正在查找以
songVar
开头的第一个子数组的索引,请尝试如下操作:
val index = arrayOfSongs.indexOfFirst { it[0] == songVar }