【问题标题】:How to get multi-dimenstional primitive array class in kotlin?如何在 kotlin 中获取多维原始数组类?
【发布时间】:2017-10-18 08:47:40
【问题描述】:

在 Java 中,我一直在使用 gson 将类似 [[1.2, 4.1], [3.4, 4.4]] 的 json 解析为 java 原始多数组 double[][]

代码看起来像这样(并且工作正常):

String json = "[[1.2, 4.1], [3.4, 4.4]]"
double[][] variable = new Gson().fromJson(json, double[][].class);

有没有办法在 kotlin 中获取 double[][].classdouble[][] variable; 可以在 kotlin 中替代吗?

编辑:

我的目标是在 kotlin 中使用 gson 实现相同的行为。我有数千个双精度数组要解析。

我想在 kotlin 中做这样的事情:

val json = "[[1.1, 1.2], [2.1, 2.2, 2.3], [3.1, 3.2]"
val variable:Double[][] = Gson().fromJson(json, Double[][]::class.java)

【问题讨论】:

    标签: java arrays json kotlin gson


    【解决方案1】:

    Gson问题解答

    对于您的用例的类类型,请使用Array<DoubleArray>::class.java)

    关于多维数组的一些附加词

    只需将arrayOf 包装成另一个arrayOfdoubleArrayOf(减少装箱开销)即可得到Array<DoubleArray> 之类的东西:

    val doubles : Array<DoubleArray>  = arrayOf(doubleArrayOf(1.2), doubleArrayOf(2.3))
    

    也可以使用以下constructor 嵌套多个数组初始化器:

    public inline constructor(size: Int, init: (Int) -> T)
    

    调用可能如下所示:

    val doubles2: Array<DoubleArray> = Array(2) { i ->
        DoubleArray(2) { j ->
            j + 1 * (i + 1).toDouble()
        }
    }
    //[[1.0, 2.0], [2.0, 3.0]]
    

    【讨论】:

    • 你可以做 Array::class.java
    【解决方案2】:

    以后,您可以尝试使用 Kotlin 转换器。我拿了你的代码并通过转换器运行它,得到了以下与给出的答案一致的工作代码。

    internal var json = "[[1.2, 4.1], [3.4, 4.4]]"
    internal var variable = Gson().fromJson(json, Array<DoubleArray>::class.java)
    

    【讨论】:

      【解决方案3】:

      对于这种情况,您可以混合使用 arrayOfdoubleArrayOf

      arrayOf(
          doubleArrayOf(1.2, 4.1)
          doubleArrayOf(3.4, 4.4)
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-25
        • 2017-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多