Scala使用for循环生成数组
时间: 2024-01-16 15:02:39 浏览: 31
在Scala中,可以使用for循环生成数组。以下是一个示例:
```scala
val arr = for (i <- 0 until 10) yield i * 2
```
在这个示例中,我们使用了一个for循环来生成一个包含10个元素的数组。`0 until 10`表示从0到9的范围,`yield i * 2`表示将每个元素乘以2,并将结果存储到新数组中。最终,arr将被赋值为一个包含0、2、4、6、8、10、12、14、16、18这10个元素的数组。
需要注意的是,`for ... yield`语法可以用于任何集合类型,不仅仅是数组。
相关问题
scala for循环
Scala中的for循环有多种形式,可以用于遍历集合、数组或者执行一系列操作。以下是几种常见的Scala for循环形式:
1. 基本for循环:
```
for (i <- 1 to 5) {
println(i)
}
```
这个例子中,for循环从1到5遍历,每次迭代都会打印出当前的值。
2. 使用until的for循环:
```
for (i <- 1 until 5) {
println(i)
}
```
这个例子中,for循环从1到4遍历,不包括上限值5。
3. 遍历集合:
```
val list = List("apple", "banana", "orange")
for (fruit <- list) {
println(fruit)
}
```
这个例子中,for循环遍历了一个字符串列表,并打印出每个元素。
4. 嵌套for循环:
```
for (i <- 1 to 3; j <- 1 to 2) {
println(s"i: $i, j: $j")
}
```
这个例子中,使用了两个变量i和j进行嵌套循环,打印出所有可能的组合。
5. 使用if条件的for循环:
```
for (i <- 1 to 5 if i % 2 == 0) {
println(i)
}
```
这个例子中,for循环遍历1到5的数字,但只打印出偶数。
如何用scala优化双重for循环
可以使用flatMap和filter函数来优化双重for循环,将其转化为单层循环。具体实现可以参考以下代码:
val result = list1.flatMap(x => list2.filter(y => x + y == target).map(y => (x, y)))
其中,list1和list2分别为两个需要遍历的列表,target为目标值。flatMap函数将list1中的每个元素映射为一个列表,然后将这些列表合并为一个新的列表。filter函数用于过滤出符合条件的元素,map函数用于对符合条件的元素进行映射。最终得到的result列表中,每个元素都是一个符合条件的元组。