1、获取元素个数
同字符串一样,数组也可以用size或者count()来获取元素个数。
val persion = arrayOf<Any>("alfred",29,"男",180,"65kg")
println(persion.size)
println(persion.count())
结果
5
5
2、获取指定位置的元素
获取指定位置的元素我们可以用数组[下标]
的方式获取,对于首尾元素我们还可以用first() 和last()
来获取:
val persion = arrayOf<Any>("alfred",29,"男",180,"65kg")
println(persion.first())
println(persion.last())
println(persion[0])
println(persion[1])
println(persion[2])
println(persion[3])
println(persion[4])
}
结果
alfred
65kg
alfred
29
男
180
65kg
另外还有个component1() 到component5()可以获取第一个到第五个元素,坑爹不?只有1-5没有component6()!!!!!所以这个快捷方法还是不要用了。
3、检查时候含有某个元素
跟字符串一样也有contains
函数,返回结果依然是布尔类型
val persion = arrayOf<Any>("alfred", 29, "男", 180, "65kg")
println(persion.contains(29))
结果:true
4、数组过滤操作符
drop
:返回去掉前n个元素后列表。
dropLast
:返回去掉后n个元素的列表。
dropWhile
:返回第一个不符合条件元素到最后一个元素的元素列表。
dropLastWhile
:从最后一项起,去掉满足条件的元素,直到不满足条件的一项为止,返回剩下所有的元素。
fun main(args: Array<String>) {
val numbers = arrayOf(4, 1, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
println(numbers.drop(3))
//返回去掉前三个元素的列表
println(numbers.dropLast(3))
//返回去掉后三个元素的列表
println(numbers.dropWhile { it < 7 })
//返回第一个不符合条件元素到最后一个元素的元素列表
println(numbers.dropLastWhile { it > 3 }.toList())
//从最后一项起,去掉满足条件的元素,直到不满足条件的一项为止,返回剩下所有的元素
}
结果:
[3, 2, 5, 3, 4, 5, 6, 7, 8]
[4, 1, 2, 3, 2, 5, 3, 4, 5]
[7, 8]
[4, 1, 2, 3, 2, 5, 3]
take
:从第一项开始,返回N个元素
takeLast
:从最后一项开始,返回N个元素
takeWhile
:从第一项开始,直到不满足条件为止,返回N个元素
takeLastWhile
:从第后项开始,直到不满足条件为止,返回N个元素
fun main(args: Array<String>) {
val numbers = arrayOf(4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
//从第一项开始,返回N个元素
println(numbers.take(3))
//从最后一项开始,返回N个元素
println(numbers.takeLast(3))
//从第一项开始,直到不满足条件为止,返回N个元素
println(numbers.takeWhile { it > 2 })
//从第后项开始,直到不满足条件为止,返回N个元素
println(numbers.takeLastWhile { it > 5 })
}
结果:
[4, 5, 2]
[6, 7, 8]
[4, 5]
[6, 7, 8]
这几个函数确实比较绕,号称变态四人组,索性的是实际代码中用的比较少。
5、查找
find
find一般与其他函数结合起来使用,语法数组.find{条件}
,返回符合条件的首个元素,如:
val numbers = arrayOf(4, 1, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
print(numbers.find { it > 6 })
结果:6
findLast
看名字就知道,找到符合条件的最后一个元素。
val numbers = arrayOf(4, 1, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
print(numbers.findLast { it > 6 })
结果:8
6、joinToString()
把整个数组输出为每个元素间以逗号分隔的字符串:
val numbers = arrayOf(4, 1, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
print(numbers.joinToString())
结果:4, 1, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8
其实这个函数很强大,可以加入很多参数,返回不同的效果,来看源码:
/**
* Creates a string from all the elements separated using [separator] and using the given [prefix] and [postfix] if supplied.
*
* If the collection could be huge, you can specify a non-negative value of [limit], in which case only the first [limit]
* elements will be appended, followed by the [truncated] string (which defaults to "...").
*
* @sample samples.collections.Collections.Transformations.joinToString
*/
public fun <T> Array<out T>.joinToString(separator: CharSequence = ", ", prefix: CharSequence = "", postfix: CharSequence = "",
limit: Int = -1, truncated: CharSequence = "...", transform: ((T) -> CharSequence)? = null): String {
return joinTo(StringBuilder(), separator, prefix, postfix, limit, truncated,transform).toString()
}
- separator:分隔符
- prefix:字符串的前缀
- postfix:字符串的后缀
- limit:允许显示的最大个数
- truncated:对超出limit的显示符号
- transform:我们可以称之为改造函数,对元素修改
val numbers = arrayOf(4, 1, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
print(numbers.joinToString(separator = ", ", prefix = "数据[", postfix = "]", limit = 5, truncated = "* * *") {
"$it 号电梯"
})
结果:数据[4 号电梯, 1 号电梯, 2 号电梯, 3 号电梯, 2 号电梯, * * *]
7、数组切割
切割数组sliceArray方法可以把指定范围内的索引取出,返回类型为数组:
val numbers = arrayOf(4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
println(numbers.sliceArray(2..5).toList())
结果:[2, 3, 2, 5]
注意:
toList() 可以将数组类型转化为列表。
8、数组反序列输出
reverse()
:直接将数组的顺利颠倒
例:
val numbers = arrayOf(4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
numbers.reverse()
println(numbers.toList())
结果:[8, 7, 6, 5, 4, 3, 5, 2, 3, 2, 5, 4]
reversed()
:原数组不变,返回一个反序列的列表
val numbers = arrayOf(4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
println(numbers.reversed())
println(numbers.toList())
结果:
[8, 7, 6, 5, 4, 3, 5, 2, 3, 2, 5, 4]
[4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8]
reversedArray():
原数组不变,返回一个反序列的数组
val numbers = arrayOf(4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
println(numbers.reversedArray().toList())
println(numbers.toList())
结果:
[8, 7, 6, 5, 4, 3, 5, 2, 3, 2, 5, 4]
[4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8]
9、数组排序
9.1、sortedArray、sortedArrayDescending
sortedArray():
返回一个递增排序的数组,原数组不变
sortedArrayDescending():
返回一个递减排序的数组,原数组不变
val numbers = arrayOf(4, 5, 2, 3, 2, 5, 3, 4, 5, 6, 7, 8)
println( numbers.sortedArray().toList())
println(numbers.sortedArrayDescending().toList())
结果:
[2, 2, 3, 3, 4, 4, 5, 5, 5, 6, 7, 8]
[8, 7, 6, 5, 5, 5, 4, 4, 3, 3, 2, 2]
sortedArray()与sortedArrayDescending()排序意义不大,适合数字类型的数组。
下面我们来看增强版排序。
9.2、sortedBy、sortedByDescending
sortedBy:
根据指定条件判断,进行递增排序,返回列表
sortedByDescending :
根据指定条件判断,进行递增排序,返回列表
val names = arrayOf("Curry", "LeBron", "Kobe", "Anthony")
println(names.sortedBy { s -> s.length })
println(names.sortedByDescending { s -> s.length })
结果:
[Kobe, Curry, LeBron, Anthony]
[Anthony, LeBron, Curry, Kobe]
9.3、sortBy、sortByDescending
sortBy:
直接对原数组操作,按指定条件进行递增排列
val names = arrayOf("Curry", "LeBron", "Kobe", "Anthony")
names.sortBy { s -> s.length }
println(names.toList())
结果:
[Kobe, Curry, LeBron, Anthony]
sortByDescending :
直接对原数组操作,按指定条件进行递减排列
val names = arrayOf("Curry", "LeBron", "Kobe", "Anthony")
names.sortByDescending { s -> s.length }
println(names.toList())
结果:
[Anthony, LeBron, Curry, Kobe]