如何用值初始化 Kotlin 中的数组?
How to initialize an array in Kotlin with values?
在Java中可以初始化一个数组如:
int numbers[] = new int[] {10, 20, 30, 40, 50}
Kotlin 的数组初始化是怎样的?
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
您还可以提供一个初始化函数作为第二个参数:
val numbers = IntArray(5) { 10 * (it + 1) }
// [10, 20, 30, 40, 50]
这是一个例子:
fun main(args: Array<String>) {
val arr = arrayOf(1, 2, 3);
for (item in arr) {
println(item);
}
}
您还可以使用 playground 来测试语言功能。
值得一提的是,当使用 kotlin 内置函数(例如 intArrayOf()
、longArrayOf()
、arrayOf()
等)时,您无法使用默认值(或所有值初始化为desired value) 对于给定的大小,您需要根据 class 构造函数通过调用进行初始化。
// 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 }
你可以使用这些方法
var numbers=Array<Int>(size,init)
var numbers=IntArray(size,init)
var numbers= intArrayOf(1,2,3)
例子
var numbers = Array<Int>(5, { i -> 0 })
init表示默认值(initialize)
老问题,但如果您想使用范围:
var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()
产生几乎相同的结果:
var numbers = Array(5, { i -> i*10 + 10 })
结果:10、20、30、40、50
我认为第一个选项更具可读性。两者都有效。
在 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} // 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。
我认为有一点值得一提但文档中不够直观的是,当您使用工厂函数创建数组并指定它的大小时,该数组会使用相等的值进行初始化到他们的指数值。例如,在这样的数组中:
val array = Array(5, { i -> i })
,分配的初始值是 [0,1,2,3,4]
而不是 [0,0,0,0,0]
。这就是为什么从文档中,val asc = Array(5, { i -> (i * i).toString() })
产生 ["0", "1", "4", "9", "16"]
的答案
就我而言,我需要初始化我的抽屉物品。我用下面的代码填充数据。
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-
class DrawerItem(var icon: Int, var name: String) {
}
你可以试试这个:
var a = Array<Int>(5){0}
以这种方式初始化数组:val paramValueList : Array<String?> = arrayOfNulls<String>(5)
您可以像这样创建一个 Int 数组:
val numbers = IntArray(5, { 10 * (it + 1) })
5 是 Int 数组大小。 lambda 函数是元素初始化函数。 'it' 范围在 [0,4],加 1 使范围在 [1,5]
原始函数是:
/**
* 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)
...
}
IntArray class定义在Arrays.kt
在全局声明 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)
}
您可以简单地使用现有的标准库 ,如下所示:
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)
在 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)
Kotlin 语言有专门的 classes 来表示没有装箱开销的基本类型数组:例如 – IntArray
、ShortArray
、ByteArray
等。我需要可以说这些class和父Array
class没有继承关系,但是它们有相同的一组方法和属性。他们每个人也有相应的工厂功能。因此,要在 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]
我想知道为什么没有人给出最简单的答案:
val array: Array<Int> = [1, 2, 3]
根据对我的原始答案的评论之一,我意识到这仅在用于注释参数时才有效(这对我来说真的出乎意料)。
看起来 Kotlin 不允许在注释之外创建数组文字。
例如,使用 args4j 库中的@Option 查看这段代码:
@Option(
name = "-h",
aliases = ["--help", "-?"],
usage = "Show this help"
)
var help: Boolean = false
选项参数 "aliases" 的类型为 Array<String>
在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)
这样就可以在koltin中初始化int数组了
val values: IntArray = intArrayOf(1, 2, 3, 4, 5,6,7)
简单方法:
对于整数:
var number = arrayOf
(10 , 20 , 30 , 40 ,50)
保留所有数据类型
var number = arrayOf(10, "string value", 10.5)
我的回答补充了@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}
这是一个简单的例子
val id_1: Int = 1
val ids: IntArray = intArrayOf(id_1)
对于二维数组:
val rows = 3
val cols = 3
val value = 0
val array = Array(rows) { Array<Int>(cols) { value } }
您可以将元素类型更改为您想要的任何类型(字符串、Class、...)并将值更改为相应的默认值。
初始化字符串时检查下面
val strings = arrayOf("January", "February", "March")
我们可以使用其专用的 arrayOf 方法轻松初始化原始 int 数组:
val integers = intArrayOf(1, 2, 3, 4)
在Java中可以初始化一个数组如:
int numbers[] = new int[] {10, 20, 30, 40, 50}
Kotlin 的数组初始化是怎样的?
val numbers: IntArray = intArrayOf(10, 20, 30, 40, 50)
您还可以提供一个初始化函数作为第二个参数:
val numbers = IntArray(5) { 10 * (it + 1) }
// [10, 20, 30, 40, 50]
这是一个例子:
fun main(args: Array<String>) {
val arr = arrayOf(1, 2, 3);
for (item in arr) {
println(item);
}
}
您还可以使用 playground 来测试语言功能。
值得一提的是,当使用 kotlin 内置函数(例如 intArrayOf()
、longArrayOf()
、arrayOf()
等)时,您无法使用默认值(或所有值初始化为desired value) 对于给定的大小,您需要根据 class 构造函数通过调用进行初始化。
// 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 }
你可以使用这些方法
var numbers=Array<Int>(size,init)
var numbers=IntArray(size,init)
var numbers= intArrayOf(1,2,3)
例子
var numbers = Array<Int>(5, { i -> 0 })
init表示默认值(initialize)
老问题,但如果您想使用范围:
var numbers: IntArray = IntRange(10, 50).step(10).toList().toIntArray()
产生几乎相同的结果:
var numbers = Array(5, { i -> i*10 + 10 })
结果:10、20、30、40、50
我认为第一个选项更具可读性。两者都有效。
在 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} // 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。
我认为有一点值得一提但文档中不够直观的是,当您使用工厂函数创建数组并指定它的大小时,该数组会使用相等的值进行初始化到他们的指数值。例如,在这样的数组中:
val array = Array(5, { i -> i })
,分配的初始值是 [0,1,2,3,4]
而不是 [0,0,0,0,0]
。这就是为什么从文档中,val asc = Array(5, { i -> (i * i).toString() })
产生 ["0", "1", "4", "9", "16"]
就我而言,我需要初始化我的抽屉物品。我用下面的代码填充数据。
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-
class DrawerItem(var icon: Int, var name: String) {
}
你可以试试这个:
var a = Array<Int>(5){0}
以这种方式初始化数组:val paramValueList : Array<String?> = arrayOfNulls<String>(5)
您可以像这样创建一个 Int 数组:
val numbers = IntArray(5, { 10 * (it + 1) })
5 是 Int 数组大小。 lambda 函数是元素初始化函数。 'it' 范围在 [0,4],加 1 使范围在 [1,5]
原始函数是:
/**
* 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)
...
}
IntArray class定义在Arrays.kt
在全局声明 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)
}
您可以简单地使用现有的标准库
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)
在 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)
Kotlin 语言有专门的 classes 来表示没有装箱开销的基本类型数组:例如 – IntArray
、ShortArray
、ByteArray
等。我需要可以说这些class和父Array
class没有继承关系,但是它们有相同的一组方法和属性。他们每个人也有相应的工厂功能。因此,要在 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]
我想知道为什么没有人给出最简单的答案:
val array: Array<Int> = [1, 2, 3]
根据对我的原始答案的评论之一,我意识到这仅在用于注释参数时才有效(这对我来说真的出乎意料)。
看起来 Kotlin 不允许在注释之外创建数组文字。
例如,使用 args4j 库中的@Option 查看这段代码:
@Option( name = "-h", aliases = ["--help", "-?"], usage = "Show this help" ) var help: Boolean = false
选项参数 "aliases" 的类型为 Array<String>
在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)
这样就可以在koltin中初始化int数组了
val values: IntArray = intArrayOf(1, 2, 3, 4, 5,6,7)
简单方法:
对于整数:
var number = arrayOf
保留所有数据类型
var number = arrayOf(10, "string value", 10.5)
我的回答补充了@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}
这是一个简单的例子
val id_1: Int = 1
val ids: IntArray = intArrayOf(id_1)
对于二维数组:
val rows = 3
val cols = 3
val value = 0
val array = Array(rows) { Array<Int>(cols) { value } }
您可以将元素类型更改为您想要的任何类型(字符串、Class、...)并将值更改为相应的默认值。
初始化字符串时检查下面
val strings = arrayOf("January", "February", "March")
我们可以使用其专用的 arrayOf 方法轻松初始化原始 int 数组:
val integers = intArrayOf(1, 2, 3, 4)