【scala初学】scala 控制 for while match if

简介:

 上一章我们共同研究了for循环以及变种。这章我们围绕比较常用的几个其他控制语句学习。

 

首先,对for进行补充,  For-Comprehensions

格式: for (s ) yield e

举例:

1
2
3
var  range  =  0 .until( 10 )
var  =  for  (p <- range  if  p >  5 yield  p
println(m);

结果:

Vector(6, 7, 8, 9)

 

下面我们根据官方例子来先大家展示一下,格式如下:

1
2
3
4
//A simple for-comprehension
for  (x <e) yield e’
//is translated to
e.map(x => e’)

意思就是说 for循环这种方式可以用于和map互换(如果你有java基础,应该知道map是什么)

首先,来看看具体官方例子:

1
for  (p <persons  if  p.age >  20 yield  p.name

我们自己为他补全代码

1
2
3
4
5
6
7
class  person (name 1 : String, age 1  :  Int) {
var   age  =  age 1 ;
var   name  =  name 1 ;
}
var  persons  :  List[person]  =  List( new  person( "s" , 1 ), new  person( "a" , 2 ), new  person( "b" , 3 ));
var  n 2  =  for  (p <- persons; if  p.age >  1 yield  p.name
println(n 2 );

打印结果会是

1
List(a, b)

根据结果,我们得到了p.age大于1的 所有person的name.即p.name

这种方式,很类似一个

1
var  persons   =  Map(a ->  1 , b ->  2 , c ->  3 )

通过键值对的方式取值。顺便学习下Map吧

1
2
3
4
var  range 1  =  1 .until( 4 )
var  m 1   =  Map( 1  ->  24 2  ->  25 3  ->  26 )
var  =  for  (p <- range 1  if  p >  1 yield  m 1 (p)
println(n)

结果是

1
Vector( 25 26 )

 

for语句还可以更复杂点

1
2
3
4
var  =   for  { i <-  0 .until( 10 )
j <-  1 .until(i)
if  i+j> 5 yield  (i, j)
println(m)

 

还可以更复杂点,但目前够用了。 大家要理解for,从上一章到这一章基本够用了。下面补充其他的常用控制语句。

一 while

1
2
3
while  ( true ) {
//TODO do something
}

会死循环,切记慎用,还可以这样

1
2
do //DO SOMETHING}
while  ( true )

java程序员可能会犯的错误

1
2
3
var  line  =  ""
while  ((line  =  readLine()) ! =  "" //记住scala不支持这种方式,line会得不到值
println( "Read: " + line)

 

二 match

1
2
3
4
5
6
7
var  =  1 ;
var  =  0 ;
a   match  {
case  1  = >  i  =  2
case  2  = >  i  =  5
}
println(i);

参数a 可以用一个函数的返回值替换

1
2
3
4
5
6
7
8
9
10
11
def  match _ re  :  Int = {
1
}
def  match _ 1 = {
var  =  0 ;
match _ re   match  {
case  1  = >  i  =  2
println( "i = 2" );
case  2  = >  i  =  5
println( "i = 5" );
}

这里我们看到特殊符号 => 再一次出现, 用于 case when

 

三 if else

1
2
3
4
5
6
7
8
var  =  3
if (a> 3 ){
println( "3 success" );
} else  if (a> 2 ){
println( "2 success" );
} else {
println( "success" );
}









本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/yjplxq/1412807,如需转载请自行联系原作者
目录
相关文章
|
Scala
Scala【自定义while循环】
你用过自定义的while循环码? 真厉害了Scala
192 0
|
11月前
|
分布式计算 大数据 Java
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
大数据-87 Spark 集群 案例学习 Spark Scala 案例 手写计算圆周率、计算共同好友
158 5
|
11月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
115 3
|
11月前
|
消息中间件 分布式计算 NoSQL
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
大数据-104 Spark Streaming Kafka Offset Scala实现Redis管理Offset并更新
160 0
|
11月前
|
消息中间件 存储 分布式计算
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
大数据-103 Spark Streaming Kafka Offset管理详解 Scala自定义Offset
207 0
|
11月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
179 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
11月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
217 0
|
11月前
|
缓存 分布式计算 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(一)
169 0
|
11月前
|
分布式计算 算法 大数据
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
大数据-90 Spark 集群 RDD 编程-高阶 RDD容错机制、RDD的分区、自定义分区器(Scala编写)、RDD创建方式(二)
161 0