Kotlin中如何正确获取ArrayList的元素索引值?
如何正确获取ArrayList中元素的索引?
你当前的代码:
val countryCodeList = arrayListOf(*resources.getStringArray(R.array.countryCodes)) val countryIndex = countryCodeList.indexOf("+1")
仅能返回0或-1,核心问题是你的列表元素并非单独的国家码,而是包含国家码和国家名称的完整字符串(从日志的[+82, Korea]、[+1, USA]可以看出)。indexOf方法是做完全匹配,只有当元素完全等于"+1"时才会返回对应索引,其他情况因为元素是"+X, 国家名"的格式,完全匹配不上,所以返回-1。
解决方案
根据你的元素格式,提供两种可行的处理方式:
1. 直接遍历匹配前缀/分割匹配
如果元素是"国家码, 国家名"的格式,推荐先分割字符串再精准匹配,避免误判:
val targetCode = "+1" // 分割元素后取第一个部分(国家码)匹配 val countryIndex = countryCodeList.indexOfFirst { it.split(",").firstOrNull()?.trim() == targetCode }
如果确定国家码一定是元素的开头,也可以用startsWith简化:
val countryIndex = countryCodeList.indexOfFirst { it.startsWith(targetCode) }
indexOfFirst会返回第一个符合条件的元素索引,找不到则返回-1。
2. 提前转换为结构化数据
如果后续需要频繁操作国家码和名称,建议先把数组转换成Pair列表,让数据结构更清晰:
// 将原数组转换为(国家码, 国家名)的Pair列表 val countryList = resources.getStringArray(R.array.countryCodes).map { val parts = it.split(",") Pair(parts[0].trim(), parts[1].trim()) } // 直接匹配Pair中的国家码 val countryIndex = countryList.indexOfFirst { it.first == "+1" }
这种方式不仅查找更直观,后续获取对应国家名称也更方便:countryList[countryIndex].second。
验证
比如针对日志中的[+1, USA]元素,无论它在列表的第几位,以上两种方式都能正确返回它的索引值。
内容的提问来源于stack exchange,提问作者Lucy
相关产品推荐
相关产品推荐

