Kotlin 数组初始化函数

6

我刚接触 Kotlin,对于 init 函数 在数组上下文中的作用理解有困难。具体来说,如果我想创建一个 String 类型的数组:

val a = Array<String>(a_size){"n = $it"}
  1. 这个代码可行,但是 "n = $it" 是什么意思呢?它不像 init 函数,因为它在大括号内而不是括号内。

  2. 如果我想要一个 Int 数组,init 函数或大括号内的内容应该怎样写?

1个回答

12
您正在使用初始化程序调用构造函数:
/**
 * Creates a new array with 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) -> T)

因此,您将一个函数传递给构造函数,并且该函数将为每个元素调用。结果将是a的结果。
[
  "n = 0",
  "n = 1",
  ...,
  "n = $a_size"
]

如果你只想创建一个所有值都为0的数组,可以这样做:
val a = Array<Int>(a_size) { 0 }

另外,您可以按照以下方式创建数组:

val a = arrayOf("a", "b", "c")
val b = intArrayOf(1, 2, 3)

1
如果我不想用任何值初始化数组怎么办?Kotlin中等价于Java代码ArrayList<Integer> lst = new ArrayList<Integer>(10);的语句是什么? - Araf
2
在Java中,这将导致一个包含所有“0”值的列表。在Kotlin中,你必须明确指定这一点。 - nhaarman
我明白了。但是我正在编写一个twig模板,尝试将各种数据类型的数组创建语法进行泛化。因此,我希望有一个类似于Array<{{TYPE}}>(a_size) { {{GENERAL_INITIALIZER}} }的读取方式。当前的语法是否支持这种操作? - Araf
2
你需要创建一个包含可空值的数组,或者为该类型提供一个默认的非空值。 - nhaarman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接