是否有更简洁的写作方式
listOf('a'..'z','A'..'Z').flatMap { it }
Run Code Online (Sandbox Code Playgroud)
这里的想法是迭代一个范围内的一些值,比如从1到100的数字,跳过21到24
listOf(1..20, 25..100).flatMap { it }
Run Code Online (Sandbox Code Playgroud)
Jay*_*ard 21
您可以通过使用去列表稍短flatten(),而不是flatMap():
listOf('a'..'z','A'..'Z').flatten()
Run Code Online (Sandbox Code Playgroud)
或较短的形式(从@Ilya)是使用plus() +操作者的Iterable(即范围实现接口).每个人+都会复制一份清单:
val validLetters = ('a'..'z') + ('A'..'Z')
val someNumbers = (1..20) + (25..100)
Run Code Online (Sandbox Code Playgroud)
或者更加懒惰Sequence(不确定在这里是否更加懒散):
sequenceOf('a'..'z','A'..'Z').flatten()
Run Code Online (Sandbox Code Playgroud)
在Kotlin,人们通常会创建一个辅助函数来很好地包装这样的东西; 如果你碰巧重复使用这段代码:
// helper functions
fun sparseListOf(vararg ranges: CharRange): List<Char> = ranges.flatMap { it }
fun sparseListOf(vararg ranges: IntRange): List<Int> = ranges.flatMap { it }
Run Code Online (Sandbox Code Playgroud)
......以及这些助手的用法:
val validLetters = sparseListOf('a'..'z', 'A'..'Z')
val someNumbers = spareListOf(1..20, 25..100)
Run Code Online (Sandbox Code Playgroud)
注意: 辅助函数使用,flatMap()因为没有flatten()方法或扩展名,Array<out XYZ>从中接收的类型vararg.lambda内联很可能没有真正的性能差异.
| 归档时间: |
|
| 查看次数: |
4403 次 |
| 最近记录: |