我需要在Scala中创建一堆新的对象。以下C#代码的最短等效代码是什么?
var n = 100;
var persons = Enumerable.Range(1, n).Select(x=>new Person(x)).ToList();
这有什么问题吗?
val persons: List[Person] = (1 to n) map (new Person(_))
我需要在Scala中创建一堆新的对象。以下C#代码的最短等效代码是什么?
var n = 100;
var persons = Enumerable.Range(1, n).Select(x=>new Person(x)).ToList();
这有什么问题吗?
val persons: List[Person] = (1 to n) map (new Person(_))
List.range(1, n + 1).map(new Person(_))
(1 to n).map(new Person(_)).toList
需要调用toList
, 因为(1 to n).map(new Person(_))
会产生一个IndexedSeq[Person]
. 注意,1 to n
的类型是Range.Inclusive
, 与List.range(1, n + 1)
的类型List[Int]
不同。
Enumerable.Range
的第二个参数是计数,因此您需要使用 List.range(1, n + 1)
。 - Lee(1 to n)
和 List.range(1, n + 1)
之间有什么区别? - python_kaaList.tabulate(n)(new Person(_))
。还要注意,有一个更常见的方法.fill,用于稍微不同的目的(只有N个元素,索引未使用)。(1 to n)是一种通用形式,通常与map、foreach操作一起使用,然后转换为所需的集合(如.toList、toArray)。 - om-nom-nom(1 到 n)
更常用,因为并不是每个人都知道集合的伴随方法。 - om-nom-nom
toList
。 - LeeList
吗?你现在的方法给你一个Seq[Person]
(用Vector
实现),对于大多数情况来说应该是很好的,如果不是更好的话。 - Luigi Plinge