首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用范围的稀疏值列表

使用范围的稀疏值列表
EN

Stack Overflow用户
提问于 2016-01-19 15:45:02
回答 2查看 10.4K关注 0票数 12

有没有更简洁的写作方式?

代码语言:javascript
运行
复制
listOf('a'..'z','A'..'Z').flatMap { it }

这里的想法是在一个范围内迭代一些值,比如从1到100之间的数字,跳过21到24。

代码语言:javascript
运行
复制
listOf(1..20, 25..100).flatMap { it }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-19 15:53:04

通过使用flatten()而不是flatMap(),可以将列表稍微缩短一些

代码语言:javascript
运行
复制
listOf('a'..'z','A'..'Z').flatten()

或者一个较短的表单(来自@Ilya)是使用 operator of Iterable (一个范围为实现的接口)。每个+都将复制列表:

代码语言:javascript
运行
复制
val validLetters = ('a'..'z') + ('A'..'Z')
val someNumbers = (1..20) + (25..100)

或者像Sequence那样变得更懒(在这里根本不确定是否更懒惰):

代码语言:javascript
运行
复制
sequenceOf('a'..'z','A'..'Z').flatten()

##As Helper Functions##

在Kotlin中,人们通常会创建一个帮助函数来很好地包装这样的东西;如果您经常重复使用这些代码:

代码语言:javascript
运行
复制
// helper functions
fun sparseListOf(vararg ranges: CharRange): List<Char> = ranges.flatMap { it }       
fun sparseListOf(vararg ranges: IntRange): List<Int> = ranges.flatMap { it }

...and这些助手的用法:

代码语言:javascript
运行
复制
val validLetters = sparseListOf('a'..'z', 'A'..'Z')
val someNumbers = spareListOf(1..20, 25..100)

注意:帮助函数使用flatMap(),因为Array<out XYZ>没有flatten()方法或扩展,这是从vararg__接收的类型。lambda是内联的,所以性能上没有真正的差别。

票数 27
EN

Stack Overflow用户

发布于 2016-01-19 16:21:28

kotlin.Char.rangeTo返回一个CharRange,它是CharProgression的实现。CharProgression是Iterable的子类,加号运算符是在可迭代的:Iterable<T>.plus上定义的。

看上去很简单,很明显

代码语言:javascript
运行
复制
('a'..'z') + ('A'..'Z')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34881006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档