我想比较版本名称,但要这样做,我必须使它们符合相同的标准,即Major.Minor.Patch(例如1.3.21)。 问题是我无法更改要迭代的元素。
我将版本存储为List,然后将所有版本存储在另一个列表中,并将其作为变量传递给以下函数。
var version_a = listOf(1)
var version_b = listOf(1, 2)
var version_c = listOf(1, 2, 3)
val versions = listOf(version_a, version_b, version_c)
adjustLengthExample(versions)
fun adjustLengthExample(versions: List<List<Int>>){
for((index, version) in versions.withIndex()){
while(version.size < 3){
version = mutableListOf().addAll(version).add(0) //using element: Error Val cannot be reassigned
versions[index] = mutableListOf().addAll(version).add(0) //using indexed position: Error: No set method providing array access
}
}
}
versions.foreach(Log.d(TAG, it.toString())) //Expected output: [1,0,0][1,2,0][1,2,3]
如何访问version_a / b / c并设置/更改其值?
答案 0 :(得分:2)
代替
var version_a = listOf(1)
使用
val version_a = mutableListOf(1)
然后在while
循环中只需更改列表的内容
while(version.size < 3) {
version.add(0)
// or
versions[index].add(0)
}
这是完整的示例:
fun main(args: Array<String>) {
fun adjustLengthExample(versions: List<MutableList<Int>>){
for((index, version) in versions.withIndex()){
while(version.size < 3){
version.add(0)
// or
//versions[index].add(0)
}
}
}
val version_a = mutableListOf(1)
val version_b = mutableListOf(1, 2)
val version_c = mutableListOf(1, 2, 3)
val versions = listOf(version_a, version_b, version_c)
adjustLengthExample(versions)
versions.forEach { println(it) }
}
这将输出:
[1, 0, 0]
[1, 2, 0]
[1, 2, 3]
要对不可变列表执行相同操作,必须创建新列表,并且adjustLengthExample
必须返回新列表。像这样:
fun main(args: Array<String>) {
fun adjustLengthExample(versions: List<List<Int>>): List<List<Int>> {
var result: List<List<Int>> = listOf()
for ((index, version) in versions.withIndex()) {
var newVersion: List<Int> = version
while (newVersion.size < 3) {
newVersion += 0
}
result += listOf(newVersion)
}
return result
}
val version_a = listOf(1)
val version_b = listOf(1, 2)
val version_c = listOf(1, 2, 3)
var versions = listOf(version_a, version_b, version_c)
versions = adjustLengthExample(versions)
versions.forEach { println(it) }
}
答案 1 :(得分:2)
有一个更简单的方法可以实现:
val versions = listOf(listOf(1), listOf(1, 2), listOf(1, 2, 3))
val result = versions.map {
(it + listOf(0, 0, 0)).subList(0, 3)
}
println(result)
输出:
[[1, 0, 0], [1, 2, 0], [1, 2, 3]]