Kotlin - 数组



数组用于在一个变量中存储多个相同数据类型的项目,例如在一个变量名下存储整数或字符串。

例如,如果我们需要存储 1000 名员工的姓名,那么与其创建 1000 个不同的字符串变量,不如简单地定义一个字符串数组,其容量为 1000。

与任何其他现代编程语言一样,Kotlin 也支持数组,并提供广泛的数组属性和支持函数来操作数组。

在 Kotlin 中创建数组

要在 Kotlin 中创建数组,我们使用 arrayOf() 函数,并将值以逗号分隔列表的形式放在其中

val fruits = arrayOf("Apple", "Mango", "Banana", "Orange")

或者,我们可以提供以下数据类型

val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")

或者,可以使用 arrayOfNulls() 函数创建一个给定大小的数组,其中填充了空元素。

原始类型数组

Kotlin 还有一些内置的工厂方法来创建原始数据类型的数组。例如,创建整数数组的工厂方法是

val num = intArrayOf(1, 2, 3, 4)

其他可用于创建数组的工厂方法

  • byteArrayOf()

  • charArrayOf()

  • shortArrayOf()

  • longArrayOf()

获取和设置数组的元素

我们可以使用方括号内的索引号访问数组元素。Kotlin 数组索引从零 (0) 开始。因此,如果您想访问数组的第 4 个元素,则需要将 3 作为索引。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")  
   println( fruits [0])
   println( fruits [3])   
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Apple
Orange

Kotlin 还提供 get()set() 成员函数来获取和设置特定索引处的值。查看以下示例

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   println( fruits.get(0))
   println( fruits.get(3))
   
   // Set the value at 3rd index
   fruits.set(3, "Guava")
   println( fruits.get(3)) 
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Apple
Orange
Guava

Kotlin 数组长度

Kotlin 提供了一个名为 size 的数组属性,它返回数组的大小,即长度。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   println( "Size of fruits array " + fruits.size )
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Size of fruits array 4

我们还可以使用 count() 成员函数来获取数组的大小。

遍历数组

我们可以使用 for 循环遍历数组。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   for( item in fruits ){
      println( item )
   }   
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Apple
Mango
Banana
Orange

检查元素是否存在

我们可以使用 in 运算符以及 if...else 来检查数组中是否存在元素。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")
  
   if ("Mango" in fruits){
      println( "Mango exists in fruits" )
   }else{
      println( "Mango does not exist in fruits" )
   }   
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Mango exists in fruits

数组中的不同值

Kotlin 允许在数组中存储重复值,但同时您可以使用 distinct() 成员函数获取存储在数组中的不同值的集合。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange", "Apple")
   
   val distinct = fruits.distinct()
   for( item in distinct ){
      println( item )
   }
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Apple
Mango
Banana
Orange

从数组中删除元素

我们可以使用 drop()dropLast() 成员函数分别从开头或结尾删除元素。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange", "Apple")
   
   val result = fruits.drop(2) // drops first two elements.
   for( item in result ){
      println( item )
   }
}

当您运行上述 Kotlin 程序时,它将生成以下输出

Banana
Orange
Apple

检查空数组

我们可以使用 isEmpty() 成员函数来检查数组是否为空。如果数组为空,则此函数返回 true。

示例

fun main(args: Array<String>) {
   val fruits = arrayOf<String>()
   println( "Array is empty : " + fruits.isEmpty())   
}

当您运行上述 Kotlin 程序时,它将生成以下输出

"Array is empty : true

Kotlin 数组类

Kotlin 的 Array 类定义了最基本的数据结构或集合,它基于连续的索引值工作。

Kotlin 的 Array 类是一个泛型集合,包含对其他对象的引用。它是一个有序的项目集合,可以使用其各自的索引进行访问。在 kotlin 中,可以使用 arrayOf()arrayOfNulls()emptyArray() 标准库函数创建数组变量。

构造函数

Kotlin Array 类只有一个构造函数 -

序号 构造函数和描述
1 <init>

此构造函数创建一个具有指定大小的新数组,其中每个元素都是通过调用指定的 init 函数计算的。

属性

以下是 Kotlin Array 类中定义的属性 -

序号 属性和描述
1

size

它返回数组中元素的数量。

2

indices

它返回数组的有效索引范围。

3

lastIndex

它返回数组的最后一个有效索引。

函数

以下是 kotlin Array 类中定义的函数 -

序号 函数和描述
1 get()

返回指定索引处的数组元素。

2 set()

将指定索引处的数组元素设置为指定值。

3 iterator()

创建一个迭代器,用于迭代数组的元素。

4 all()

如果所有元素都匹配给定的谓词,则返回 true。

5 any()

如果数组至少有一个元素,则返回 true。

6 average()

返回数组中元素的平均值。

7 binarySearch()

使用二分查找算法搜索数组或数组范围内的提供的元素。

8 component1()

返回数组中的第一个元素。

9 component2()

返回数组中的第二个元素。

10 component3()

返回数组中的第三个元素。

11 component4()

返回数组中的第四个元素。

12 component5()

返回数组中的第五个元素。

13 contains()

如果在数组中找到元素,则返回 true。

14 count()

返回数组中元素的数量。

15 distinct()

返回一个列表,其中仅包含给定数组中的不同元素。

16 last()

返回最后一个元素。

17 distinctBy()

返回给定数组或集合中不同元素的列表。

18 drop()

返回一个列表,其中包含除前 n 个元素之外的所有元素。

19 dropLast()

返回一个列表,其中包含除最后 n 个元素之外的所有元素。

20 dropLastWhile()

返回一个列表,其中包含除满足给定谓词的最后一个元素之外的所有元素。

21 dropWhile()

返回一个列表,其中包含除满足给定谓词的第一个元素之外的所有元素。

22 elementAtOrElse()

如果给定的索引存在于列表或集合中,则返回该索引处的元素。

23 elementAtOrNull()

返回给定索引处的元素,如果索引超出此数组的范围,则返回 null。

24 filter()

返回一个列表,其中仅包含与给定谓词匹配的元素。

25 filterNot()

返回一个列表,其中包含所有不匹配给定谓词的元素。

26 filterNotNull()

返回一个列表,其中包含所有非空元素。

27 find()

返回第一个与给定谓词匹配的元素,如果未找到此类元素,则返回 null。

28 findLast()

返回最后一个与给定谓词匹配的元素,如果未找到此类元素,则返回 null。

29 first()

返回第一个元素。

30 flatten()

返回给定数组中所有数组中所有元素的单个列表。

31 forEach()

对每个元素执行给定的操作。

32 getOrElse()

返回给定索引处的元素或调用 defaultValue 的结果。

33 getOrNull()

返回给定索引处的元素,如果索引超出此数组的范围,则返回 null。

34 groupBy()

根据给定的 keyslector 函数返回的键对原始数组的元素进行分组。

35 indexOf()

返回元素的第一个索引,如果数组不包含元素,则返回 -1。

36 indexOfFirst()

返回与给定谓词匹配的第一个元素的索引,如果数组不包含此类元素,则返回 -1。

37 indexOfLast()

返回与给定谓词匹配的最后一个元素的索引,如果数组不包含此类元素,则返回 -1。

38 intersect()

返回一个集合,其中包含此数组和指定集合都包含的所有元素。

39 isEmpty()

如果数组为空,则返回 true。

40 isNotEmpty()

如果数组不为空,则返回 true。

41 isNullOrEmpty()

如果此可空数组为 null 或为空,则返回 true。

42 joinTo()

使用分隔符附加所有元素的字符串。

43 joinToString()

使用分隔符创建所有元素的字符串。

44 lastIndexOf()

返回元素的最后一个索引,如果数组不包含元素,则返回 -1。

45 lastOrNull()

返回最后一个元素,如果数组为空,则返回 null。

46 map()

返回一个列表,其中包含将给定的转换函数应用于原始数组中每个元素的结果。

47 maxOf()

返回选择器函数生成的所有值中最大的值。

48 minOf()

返回选择器函数生成的所有值中最小的值。

49 none()

如果数组没有元素,则返回 true。

50 partition()

将原始数组拆分为一对列表。

51 random()

从该数组中返回一个随机元素。

52 randomOrNull()

从该数组中返回一个随机元素,如果该数组为空,则返回 null。

53 reduce()

有助于将数组的元素转换为单个结果。

54 reduceRight()

从最后一个元素开始累积值,并从右到左将操作应用于每个元素和当前累加器值。

55 reverse()

就地反转数组中的元素。

56 reversed()

返回一个元素顺序相反的列表。

57 runningReduce()

此函数用于对数组执行连续的累积操作。

58 shuffle()

就地随机打乱此数组中的元素。

59 single()

返回单个元素,如果数组为空或具有多个元素,则抛出异常。

60 slice()

返回一个列表,其中包含指定索引范围内的索引处的元素。

61 sliceArray()

返回一个数组,其中包含此数组中指定索引处的元素。

62 sortBy()

根据指定选择器函数返回的值的自然排序顺序就地对数组中的元素进行排序。

63 sortByDescending()

根据指定选择器函数返回的值的自然排序顺序,对数组中的元素进行降序排序(就地排序)。

64 sortDescending()

根据自然排序顺序,对数组中的元素进行降序排序(就地排序)。

65 sorted()

返回根据自然排序顺序排序的所有元素的列表。

66 sortedArray()

返回一个数组,其中包含根据自然排序顺序排序的此数组的所有元素。

67 sortedArrayDescending()

返回一个数组,其中包含根据自然排序顺序降序排序的此数组的所有元素。

68 sortedBy()

返回根据指定选择器函数返回的值的自然排序顺序排序的所有元素的列表。

69 sortedByDescending()

返回根据指定选择器函数返回的值的自然排序顺序降序排序的所有元素的列表。

70 sortedDescending()

根据自然顺序,按降序对数组的元素或集合进行排序。

71 sortedWith()

根据指定的比较器或条件,将数组的元素或集合排序到排序顺序。

72 sortWith()

根据给定比较器或条件指定的顺序,对给定范围内的数组的元素或集合进行排序。

73 subtract()

移除第一个数组中与第二个数组中元素匹配的所有元素。

74 sum()

返回数组和集合中所有元素的总和。

75 sumOf()

使用应用于集合中每个元素的选择器函数,显示所有数组和集合项的总和。

76 take()

返回包含前 n 个元素的列表。

77 takeLast()

返回包含最后 n 个元素的列表。

78 takeLastWhile()

返回包含满足给定谓词的最后几个元素的列表。

79 takeWhile()

返回包含满足给定谓词的第一个元素的列表。

80 toList()

返回包含所有元素的列表。

81 toSet()

返回所有元素的集合。

82 union()

返回一个包含两个集合中所有不同元素的集合。

测验时间 (面试 & 考试准备)

答案:D

解释

所有提到的关于 Kotlin 数组的陈述都是正确的。

Q 2 - 以下代码段的输出是什么?

fun main(args: Array<String>) {
   val fruits = arrayOf<String>("Apple", "Mango", "Banana", "Orange")

   println( fruits [2])

}

A - Apple

B - Mango

C - Banana

D - 以上都不是

答案:C

解释

Kotlin 索引从 0 开始,因此在索引 2 处我们将找到第 3 个元素,即 Banana。

答案:D

解释

选项 D 是正确的,因为我们可以使用 size 属性或 count() 函数获取数组的大小。

广告