Kotlin中的2D阵列

Roc*_*Lee 29 arrays kotlin

你如何在Kotlin中制作2D Int数组?我正在尝试将此代码转换为Kotlin:

    int[][] states = new int[][] {
        new int[]{-android.R.attr.state_pressed}, // not pressed
        new int[] { android.R.attr.state_pressed}  // pressed
    };
    int[] colors = new int[] {
        foregroundColor,
        accentColor,
        accentColor
    };
    ColorStateList myList = new ColorStateList(states, colors);
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的一次尝试,其中第一个2D阵列不起作用,但我让1D阵列工作:

    //This doesn't work:
    var states: IntArray = intArrayOf(
        intArrayOf(-android.R.attr.state_pressed), // not pressed
        intArrayOf(android.R.attr.state_pressed)  // pressed
    );
    //This array works:
    var colors: IntArray = intArrayOf(
        foregroundColor,
        accentColor,
        accentColor
    );
    val myList: ColorStateList = ColorStateList(states, colors);
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 32

您正在尝试将IntArrays放在另一个数组中以使其成为二维的.该数组的类型不能是intArray,这就是失败的原因.用arrayOf而不是包装你的初始数组intArrayOf.

val even: IntArray = intArrayOf(2, 4, 6)
val odd: IntArray = intArrayOf(1, 3, 5)

val lala: Array<IntArray> = arrayOf(even, odd)
Run Code Online (Sandbox Code Playgroud)

  • 我基本上是创建 n 个一维数组并将它们附加到另一个数组中以创建一个二维数组? (2认同)

HM *_*yem 29

您可以将此行代码用于Integer数组.

val array = Array(row, {IntArray(column)})
Run Code Online (Sandbox Code Playgroud)

这行代码非常简单,就像一维数组一样,也可以像java二维数组一样访问.


paj*_*_cz 19

创建矩阵时我一直在使用这种单线

var matrix: Array<IntArray> = Array(height) { IntArray(width) }
Run Code Online (Sandbox Code Playgroud)


s1m*_*nw1 9

1. 嵌套arrayOf调用

您可以嵌套调用arrayOf,例如,创建一个 Array IntArray,请执行以下操作:

val first: Array<IntArray> = arrayOf(
    intArrayOf(2, 4, 6),
    intArrayOf(1, 3, 5)
)
Run Code Online (Sandbox Code Playgroud)

请注意, theIntArray本身仅将类型的Int参数作为参数,因此您不能拥有一个IntArray<IntArray>显然没有多大意义的an 。

2.Array::constructor(size: Int, init: (Int) -> T)用于重复逻辑

如果要根据索引创建具有某些逻辑行为的内部数组,可以使用Array带有大小和 init 块的构造函数:

val second: Array<IntArray> = Array(3) {
    intArrayOf(it * 1, it * 2, it * 3, it * 4)
} 
//[[0, 0, 0, 0], [1, 2, 3, 4], [2, 4, 6, 8]]
Run Code Online (Sandbox Code Playgroud)


A-S*_*ani 7

简短答案:

// A 6x5 array of Int, all set to 0.
var m = Array(6) {Array(5) {0} }
Run Code Online (Sandbox Code Playgroud)

这是另一个示例,其中提供了有关发生的情况的更多详细信息:

// a 6x5 Int array initialise all to 0
var m = Array(6, {i -> Array(5, {j -> 0})})
Run Code Online (Sandbox Code Playgroud)

第一个参数是大小,第二个lambda方法用于初始化。


vog*_*Dev 6

看来您正在尝试ColorStateList在 Kotlin 中创建一个。代码有点乱,我会尽力保持可读性:

val resolvedColor = Color.rgb(214, 0, 0)
val states = arrayOf(
    intArrayOf(-android.R.attr.state_pressed),
    intArrayOf(android.R.attr.state_pressed)
)

val csl = ColorStateList(
    states,
    intArrayOf(resolvedColor, Color.WHITE)
)
Run Code Online (Sandbox Code Playgroud)