如何使用值初始化Kotlin中的数组?

时间:2015-07-12 09:20:07

标签: arrays kotlin

在Java中,可以初始化数组,例如:

int numbers[] = new int[] {10, 20, 30, 40, 50}

Kotlin的阵列初始化如何?

20 个答案:

答案 0 :(得分:209)

val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)

有关详细信息,请参阅Kotlin - Basic Types

答案 1 :(得分:59)

值得一提的是,当使用kotlin内置函数(例如intArrayOf()longArrayOf()arrayOf()等)时,您无法使用默认值初始化数组(或所有值都达到所需值)对于给定的大小,您需要根据类构造函数通过调用进行初始化。

// Array of integers of a size of N
val arr = IntArray(N)

// Array of integers of a size of N initialized with a default value of 2
val arr = IntArray(N) { i -> 2 }

答案 2 :(得分:39)

以下是一个例子:

fun main(args: Array<String>) {
    val arr = arrayOf(1, 2, 3);
    for (item in arr) {
        println(item);
    }
}

您还可以使用playground来测试语言功能。

答案 3 :(得分:32)

在Kotlin有几种方法。

var arr = IntArray(size) // construct with only size

然后只是来自用户或其他集合的初始值或您想要的任何地方。

var arr = IntArray(size, { 0 } ) // construct with size and fill array with 0
var arr = IntArray(size, { it * 1 } ) // construct with size and fill with its index

我们也可以创建内置函数的数组,如 -

var arr = intArrayOf(1, 2, 3, 4, 5) // create an array with 5 values

另一种方式

var arr = Array(size, { 0 } ) // it will create an integer array
var arr = Array<String>(size, { "$it" } ) // this will create array with "0", "1", "2" and so on.

您还可以使用doubleArrayOf()DoubleArray()或任何基本类型而不是Int。

答案 4 :(得分:19)

在Kotlin中,我们可以使用arrayOf()intArrayOf()charArrayOf()booleanArrayOf()longArrayOf()函数创建数组。

例如:

var Arr1 = arrayOf(1,10,4,6,15)  
var Arr2 = arrayOf<Int>(1,10,4,6,15)  
var Arr3 = arrayOf<String>("Surat","Mumbai","Rajkot")  
var Arr4 = arrayOf(1,10,4, "Ajay","Prakesh")  
var Arr5: IntArray = intArrayOf(5,10,15,20)  

答案 5 :(得分:5)

你可以使用这种方法

<?php
header('Content-Type: application/json');
echo json_encode(['ok' => true]);
fastcgi_finish_request(); // The user is now disconnected from the script

// do stuff with received data,

例如

var numbers=Array<Int>(size,init)
var numbers=IntArray(size,init)
var numbers= intArrayOf(1,2,3)

init表示默认值(initialize)

答案 6 :(得分:5)

老问题,但是如果你想使用范围:

var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()

产量几乎与以下结果相同:

var numbers = Array(5, { i -> i*10 + 10 })

结果:1​​0,20,30,40,50

我认为第一个选项更具可读性。两者都有效。

答案 7 :(得分:3)

您可以像这样创建一个Int数组:

val numbers = IntArray(5, { 10 * (it + 1) })

5是Int Array大小。 lambda函数是元素init函数。 '它'在[0,4]范围内,加上[1,5]

中的1个制造范围

原点功能是:

 /**
 * An array of ints. When targeting the JVM, instances of this class are 
 * represented as `int[]`.
 * @constructor Creates a new array of the specified [size], with all elements 
 *  initialized to zero.
 */
 public class IntArray(size: Int) {
       /**
        * Creates a new array of the specified [size], where each element is 
        * calculated by calling the specified
        * [init] function. The [init] function returns an array element given 
        * its index.
        */
      public inline constructor(size: Int, init: (Int) -> Int)
  ...
 }

Arrays.kt中定义的IntArray类

答案 8 :(得分:3)

我认为有一点值得一提并且文档中不够直观的是,当您使用工厂函数创建数组并指定其大小时,数组将使用等于它们的值进行初始化指数值。例如,在这样的数组中: [0,1,2,3,4],分配的初始值为[0,0,0,0,0],而不是val asc = Array(5, { i -> (i * i).toString() })。这就是为什么从文档中["0", "1", "4", "9", "16"]产生{{1}}

的答案

答案 9 :(得分:2)

你可以试试这个:

var a = Array<Int>(5){0}

答案 10 :(得分:2)

您可以使用现有的标准库methods,如下所示:

val numbers = intArrayOf(10, 20, 30, 40, 50)

虽然使用特殊的构造函数可能是有意义的:

val numbers2 = IntArray(5) { (it + 1) * 10 }

传递一个描述如何初始化值的大小和lambda。这是文档:

/**
 * Creates a new array of the specified [size], where each element is calculated by calling the specified
 * [init] function. The [init] function returns an array element given its index.
 */
public inline constructor(size: Int, init: (Int) -> Int)

答案 11 :(得分:2)

科特林语言有专门的类来表示原始类型的数组而没有装箱费:例如– IntArrayShortArrayByteArray等。我要说的是这些类没有与父类Array的继承关系,但是它们具有相同的方法和属性集。它们每个还具有相应的工厂功能。因此,要在Kotlin中用值初始化数组,只需输入以下内容:

val myArr: IntArray = intArrayOf(10, 20, 30, 40, 50)

...或者这样:

val myArr = Array<Int>(5, { i -> ((i+1) * 10) })

myArr.forEach { println(it) }                                // 10, 20, 30, 40, 50

现在您可以使用它:

myArr[0] = (myArr[1] + myArr[2]) - myArr[3]

希望这会有所帮助。

答案 12 :(得分:2)

我的答案补充了@maroun这些是初始化数组的一些方法:

使用数组

val numbers = arrayOf(1,2,3,4,5)

使用严格的数组

val numbers = intArrayOf(1,2,3,4,5)

混合类型的矩阵

val numbers = arrayOf(1,2,3.0,4f)

嵌套数组

val numbersInitials = intArrayOf(1,2,3,4,5)
val numbers = arrayOf(numbersInitials, arrayOf(6,7,8,9,10))

以动态代码开头的能力

val numbers = Array(5){ it*2}

答案 13 :(得分:1)

在我的情况下,我需要初始化我的抽屉物品。我通过以下代码填写数据。

    val iconsArr : IntArray = resources.getIntArray(R.array.navigation_drawer_items_icon)
    val names : Array<String> = resources.getStringArray(R.array.navigation_drawer_items_name)


    // Use lambda function to add data in my custom model class i.e. DrawerItem
    val drawerItems = Array<DrawerItem>(iconsArr.size, init = 
                         { index -> DrawerItem(iconsArr[index], names[index])})
    Log.d(LOGGER_TAG, "Number of items in drawer is: "+ drawerItems.size)

自定义模型类 -

class DrawerItem(var icon: Int, var name: String) {

}

答案 14 :(得分:1)

在全局

声明int数组
var numbers= intArrayOf()

接下来onCreate方法用值

初始化你的数组
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //create your int array here
    numbers= intArrayOf(10,20,30,40,50)
}

答案 15 :(得分:1)

我想知道为什么没有人给出最简单的答案:

val array: Array<Int> = [1, 2, 3]

根据我对原始答案的评论之一,我意识到这仅在注释参数中使用时有效(这对我来说真的是出乎意料的)。

像Kotlin一样,不允许在注释之外创建数组文字。

例如,使用args4j库中的@Option查看以下代码:


    @Option(
        name = "-h",
        aliases = ["--help", "-?"],
        usage = "Show this help"
    )
    var help: Boolean = false

选项参数“别名”的类型为Array<String>

答案 16 :(得分:1)

简单方法:

对于整数:

var number = arrayOf (10,20,30,40,50)

保留所有数据类型

var number = arrayOf(10,“ string value”,10.5)

答案 17 :(得分:0)

以这种方式初始化数组:val paramValueList : Array<String?> = arrayOfNulls<String>(5)

答案 18 :(得分:0)

在Java中,可以初始化数组,例如:

int numbers[] = new int[] {10, 20, 30, 40, 50}

但是在Kotlin中,数组的初始化方式很多,例如:

您可以使用 arrayOf()函数的任何通用类型的数组:

val arr = arrayOf(10, 20, 30, 40, 50)

val genericArray = arrayOf(10, "Stack", 30.00, 40, "Fifty")

使用Kotlin的实用程序函数可以初始化数组

val intArray = intArrayOf(10, 20, 30, 40, 50)

答案 19 :(得分:0)

通过这种方式,您可以在koltin中初始化int数组。

 val values: IntArray = intArrayOf(1, 2, 3, 4, 5,6,7)