使用长变量处理Kotlin数组

使用长变量处理Kotlin数组,kotlin,Kotlin,我有一个关于科特林的问题。 我尝试了Kotlin的两个版本,1.0.0和1.2.6。 使用Kotlin,我们可以像这样初始化数组并访问其元素 val n: Int = 10 val arr = Array(n, { it } ) val i: Int = 0 println(arr[i]) 但是,我在这段代码中遇到了一个错误 val n: Long = 10 val arr = Array(n, { it } ) val i: Long = 0 println(arr[i]) val n:

我有一个关于科特林的问题。 我尝试了Kotlin的两个版本,1.0.0和1.2.6。 使用Kotlin,我们可以像这样初始化数组并访问其元素

val n: Int = 10
val arr = Array(n, { it } )
val i: Int = 0
println(arr[i])
但是,我在这段代码中遇到了一个错误

val n: Long = 10
val arr = Array(n, { it } )
val i: Long = 0
println(arr[i])
val n: Long = 10
val arr = Array(n.toInt(), { it } )
val i: Long = 0
println(arr[i.toInt()])
为了编译这段代码,这似乎是将Long转换为Int的唯一方法

val n: Long = 10
val arr = Array(n, { it } )
val i: Long = 0
println(arr[i])
val n: Long = 10
val arr = Array(n.toInt(), { it } )
val i: Long = 0
println(arr[i.toInt()])
然而,这对我来说似乎太多余了,但我找不到任何解决方案。所以我的问题是

  • 是否有任何方法可以初始化数组并使用长字符串访问元素 变量
  • Kotlin是否有任何理由认为这里不应接受长变量

  • Kotlin附带了
    longArrayOf(1,2,3)
    ,它将为您创建一个包含
    Long
    s的数组

    请注意,您试图使用
    println(arr[i])
    arr
    中获取一个
    Long
    值,但是数组的索引是使用
    Int
    s完成的。它永远不会与
    Long
    s一起工作:

    /** 
     * Returns the array element at the given [index]. 
     * This method can be called using the index operator.
     */
    public operator fun get(index: Int): Long
    

    如果要初始化给定长度的长数组,可以使用相同的顶级
    array
    函数:

    val n = 10 // n is Int
    val arrayOfLongs = Array(n) { it.toLong() } // Array of 10 longs
    
    这里的数字
    n
    Int
    ,初始化器函数将被初始化元素的整数索引
    it
    转换为
    Long
    ,因此我们得到一个Long数组作为结果

    或者,您可以使用另一个类似的函数来创建专用的
    长数组

    val longArray = LongArray(n) { it.toLong() } // LongArray of 10 longs
    

    这两个数组都存储Long,但后者更紧凑。

    数组索引是使用
    Int
    s完成的,它不适用于
    Long
    s。JVM数组索引总是
    Int
    s。您将始终必须将其转换为int。