首页 文章

将数组减少为单个整数会导致类型错误

提问于
浏览
1

我正在尝试采用一对数组(StartTime:Int,EndTime:Int)并将它们减少到每个会话的累积时间 .

fun main() {
    val sessionsInSecond = listOf<Pair<Int,Int>>(Pair(10,12), Pair(10,15))

    val timeSpan: Int = sessionsInSecond.reduce{acc, it -> acc + (it.second - it.first) }
    println(timeSpan)
}

这给了我以下错误:

未解决的参考 . 以下候选人都不适用,因为接收器类型不匹配的:@InlineOnly公共内嵌运营商的乐趣BigDecimal.plus(其他:BigDecimal的):在BigDecimal的定义科特林公共@InlineOnly内嵌运营商的乐趣BigInteger.plus(其他:BigInteger的):BigInteger的定义kotlin public operator fun Array.plus(elements:Array):在kotlin.collections中定义的数组public operator fun Array.plus(elements:Collection):在kotlin.collections中定义的数组public operator fun Array.plus(element:Int):Array在kotlin.collections定义公共操作者的乐趣BooleanArray.plus(元件:布尔型):在kotlin.collections定义booleanArray中公共操作者的乐趣BooleanArray.plus(元素:booleanArray中):在booleanArray中公共kotlin.collections操作者的乐趣BooleanArray.plus(元件限定: Collection):在kotlin.collections中定义的BooleanArray公共运算符fun ByteArray.plus(element:Byte):在kotlin.collections中定义的ByteArray公共运算符fun ByteArray.plus(elements:ByteArr ay):在kotlin.collections中定义的ByteArray公共运算符fun ByteArray.plus(elements:Collection):在kotlin.collections中定义的ByteArray @InlineOnly public inline operator fun Char.plus(other:String):在kotlin.text公共运算符中定义的字符串fun CharArray.plus(element:Char):在kotlin.collections中定义的CharArray公共运算符fun CharArray.plus(elements:CharArray):在kotlin.collections中定义的CharArray公共运算符fun CharArray.plus(elements:Collection):在kotlin中定义的CharArray .collections公共运算符fun DoubleArray.plus(element:Double):在kotlin.collections中定义的DoubleArray公共运算符fun DoubleArray.plus(elements:DoubleArray):在kotlin.collections中定义的DoubleArray公共运算符fun DoubleArray.plus(elements:Collection):在kotlin.collections中定义的DoubleArray公共运算符fun FloatArray.plus(element:Float):在kotlin.collections中定义的FloatArray公共运算符fun FloatArray.plus(elements:FloatArray):FloatArray在kotlin.collections公共运算符fun FloatArray.plus(elements:Collection):在kotlin.collections中定义的FloatArray公共运算符fun IntArray.plus(element:Int):在kotlin.collections中定义的IntArray公共运算符fun IntArray.plus(elements:IntArray) :在kotlin.collections中定义的IntArray公共运算符fun IntArray.plus(elements:Collection):在kotlin.collections中定义的IntArray公共运算符fun LongArray.plus(element:Long):在kotlin.collections中定义的LongArray公共运算符fun LongArray.plus( elements:LongArray):在kotlin.collections中定义的LongArray公共运算符fun LongArray.plus(elements:Collection):在kotlin.collections中定义的LongArray公共运算符fun ShortArray.plus(element:Short):在kotlin.collections公共运算符乐趣中定义的ShortArray ShortArray.plus(elements:ShortArray):在kotlin.collections中定义的ShortArray公共运算符fun ShortArray.plus(elements:Collection):在kotlin.collections中定义的ShortArray公共运算符fun St ring?.plus(其他:Any?):在kotlin public operator fun中定义的字符串?.plus(其他:Any?):在kotlin public operator fun中定义的字符串fun.plus(elements:Array):在kotlin中定义的列表 . 集合公共运算符fun.plus(elements:Iterable):在kotlin.collections中定义的列表public operator fun Collection.plus(elements:Sequence):在kotlin.collections中定义的列表public operator fun Collection.plus(element:Int):List在kotlin.collections中定义公共运算符fun Iterable.plus(elements:Array):在kotlin.collections中定义的列表public operator fun Iterable.plus(elements:Iterable):在kotlin.collections中定义的列表public operator fun Iterable.plus(elements:序列):在kotlin.collections中定义的列表公共运算符fun Iterable.plus(element:Int):在kotlin.collections中定义的列表公共运算符fun Map.plus(pairs:Array>):在kotlin.collections中定义的映射public operator fun Map .plus(pair:Pair):在kotlin.collections公共操作中定义的映射或者有趣的Map.plus(对:Iterable>):在kotlin.collections中定义的 Map 公共运算符fun.plus(map:Map):在kotlin.collections中定义的 Map 公共运算符fun Map.plus(pairs:Sequence>):Map在kotlin.collections中定义公共运算符fun.plus(elements:Array):在kotlin.collections中定义的set public operator fun Set.plus(elements:Iterable):在kotlin.collections中定义的set public operator fun Set.plus(elements:序列):在kotlin.collections中定义的set public operator fun Set.plus(element:Int):在kotlin.collections中定义的set public operator fun Sequence.plus(elements:Array):在kotlin.sequences中定义的序列public operator fun Sequence . plus(elements:Iterable):在kotlin.sequences中定义的序列公共运算符乐趣Sequence.plus(元素:序列):在kotlin.sequences中定义的序列public operator fun Sequence.plus(element:Int):在kotlin.sequences中定义的序列

有什么建议怎么解决这个? PS . 这是reduce的练习,所以我不想只是在forEach循环中添加值 .

2 回答

  • 1

    在您的情况下, acc in reduce是 Pair<Int, Int> . 你可以使用 fold 或类似的东西

    val timeSpan = sessionsInSecond.reduce { acc, it ->
            acc.first + (it.second - it.first)
            acc
        }.first
    
  • 2

    我猜你的结果应该是 Int 吗?您可以将其更改为 fold ,以使其工作轻松:

    val timeSpan: Int = sessionsInSecond.fold(0) { acc, it -> 
        acc + (it.second - it.first) 
    }
    

    您从 0 开始并继续添加它,直到访问了所有值 . 您的代码中的问题是 acc 的类型为 Pair<Int,Int> 而不是 Int

相关问题