Scala最短等价于c#LINQ
我需要在scala中创建一组新对象 以下C代码的最短等效值是什么 这有什么问题吗Scala最短等价于c#LINQ,c#,linq,scala,loops,collections,C#,Linq,Scala,Loops,Collections,我需要在scala中创建一组新对象 以下C代码的最短等效值是什么 这有什么问题吗 val persons: List[Person] = (1 to n) map (new Person(_)) 使用: 或者像李建议的那样: (1 to n).map(new Person(_)).toList 调用toList是必需的,因为(1到n).map(new Person())会生成一个IndexedSeq[Person]。还要注意的是1到n的类型是,并且它与List.range(1,n+1)的类型
val persons: List[Person] = (1 to n) map (new Person(_))
使用:
或者像李建议的那样:
(1 to n).map(new Person(_)).toList
调用
toList
是必需的,因为(1到n).map(new Person())会生成一个IndexedSeq[Person]
。还要注意的是1到n
的类型是,并且它与List.range(1,n+1)
的类型不同,后者是List[Int]
您只需要在末尾添加一个toList
。噢,谢谢您,我的愚蠢。有scala的重拾器吗?月食没有说much@python_kaa不,在IntelliJ IDEA中甚至没有类似于R#@om nom nom的东西?我被R#宠坏了……它真的必须是一个列表吗?您的方法本身为您提供了一个Seq[Person]
(使用向量实现),如果不是更好的话,对于大多数情况下都应该是好的Enumerable.Range
的第二个参数是一个计数,因此您需要使用List.Range(1,n+1)
@FrankS.Thomas谢谢。在scala中是否通常使用点而不仅仅是空间?(1到n)
和List.range(1,n+1)
之间的区别是什么?@python\u kaa List.range用于需要特定集合,如List、seq或iterator(因此将有List.range、seq.range、iterator.range等)。这些函数不仅限于范围:如果您不限于基数1,您可以使用更短的形式:List.tablate(n)(newperson()))
。注意还有一种更为常见的方法。fill用于稍微不同的purpouse(仅N个事物,不使用索引)。(1到n)是一种通用形式,通常与map、foreach操作一起使用,然后转换为所需的集合(如.toList、toArray)。@python_kaa(1到n)
更常用,只是因为不是每个人都知道收藏methods@python_kaa关于方法调用的点或空格:这是个人风格的问题。在大多数情况下,我喜欢使用点,因为在哪个对象上调用mehotd更清晰。
List.range(1, n + 1).map(new Person(_))
(1 to n).map(new Person(_)).toList