scala学习之内建控制结构->for语句

本文介绍了Scala中的For表达式的基本用法,包括如何枚举集合类、如何进行过滤操作以及如何进行嵌套枚举。通过具体示例展示了如何列出指定目录下的特定文件,并进一步演示了如何搜索文件内容。
 

scala初学者,高手勿喷 O(∩_∩)O~

For 表达式

一、枚举集合类

代码:

val fileHere = (new java.io.File("c:\\")).listFiles

for(file <- fileHere)
 println(file)

该语句把c盘根目录下的所有文件都列出来

或者也可以使用如下方法

//scala中不常见

for(i <- 0 to filesHere.length - 1)

   println(filesHere(i))

不常见的原因是:集合对象本身可以被直接枚举,这样代码可以变得更短并回避了许多枚举数组时频繁出现的溢出越界等现象(off-by-one error)。枚举该从0还是1开始?最后的索引值应该加1还是-1,还是什么都不加?这些问题很容易回答,但也很容易出错。因此还是避免碰到为佳。

二、过滤

有时你并不想枚举集合的全部元素,而只是想取出某个子集。可以通过在for表达式的括号中添加if子句来实现。如下代码,实现了列出当前目录中以“.scala”结尾的文件名

val fileHere = (new java.io.File(".")).listFiles

for(file <- fileHere if file.getName.endsWith(".scala"))
 println(file)

或者也可以采用如下写法:

for(file <- filesHere)

   if(file.getName.endsWith(".scala"))

     println(file)

需要的话可以包含更多的过滤器,只需要不断增加if子句即可。

例如,以下代码打印输出文件而不是目录:

for(file <- filesHere

 if(file.isFile);

 if(file.getName.endsWith(".scala")

)println(file)

 注意:如果在发生器中加入超过一个过滤器,if子句必须用分号分隔

三、嵌套枚举

val filesHere = (new java.io.File(".")).listFiles

def fileLines(file: java.io.File) =
 scala.io.Source.fromFile(file).getLines.toList
def grep(pattern:String) =
 for(
 file <- filesHere
 if file.getName.endsWith(".scala");//注意这儿的分号
 line <- fileLines(file)
 if line.trim.matches(pattern)
 )println(file + ": " + line.trim)
grep(".*gcd.*")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值