我正在尝试从以下数组创建一个数组 arr=[1,2,3,4,5,6,7,8,9] ,它将以这种方式返回数字之和 1+3 = 4 ,3+5=8,5+7=12,7+9=16。所以最终的答案是 newArray =[4,8,12,16]。 我怎样才能实现它。我已经完成了下面的代码,但它不起作用。
fun main(){
val sum = arrayOf(1,2,3,4,5,6,7,8,9)
var first =0;
var second=0
for (i in sum.indices){
if(sum[i]%2!=0){
first += sum[i]
if (second!=0){
println(" $first + $second")
first=second
}
}
}
}
最佳答案
// val arr = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val arr = arrayOf(1, 3, 5, 6, 7, 8, 2, 4, 9) // shuffled for test purposes
val result = arr
// I first posted this line, which was wrong:
// .filterIndexed { index, _ -> index % 2 == 0 }
.filterIndexed { _, value -> value % 2 == 1 }
.windowed(2, 1)
.map { it.sum() }
println(result)
三个步骤的详细信息:
- 在 filterIndexed 之后:[1, 3, 5, 7, 9]
- 窗口化后:[[1, 3], [3, 5], [5, 7], [7, 9]]
- 在 map 中,每个子列表都会被汇总。
编辑:这个答案的第一个版本通过过滤 index % 2 == 0 巧合地导致了相同的结果,因为OP中的输入数组没有被洗牌。
关于arrays - 返回通过添加数组中的奇数而创建的新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72741752/