我是scala的新手,我遇到了这个问题:
def main(args: Array[String]){
val source = Source.fromFile(args(0))
val target = Source.fromFile(args(1))
for (lines <- source.getLines ; linet <- target.getLines) {
println(lines + " =source| target= " + linet);
}
}
Run Code Online (Sandbox Code Playgroud)
如果源文件和目标文件包含普通数字:1,2(每行一个数字),结果为:
1 =source| target= 1
1 =source| target= 2
但是,我希望:
1 =source| target= 1
2 =source| target= 2
问题:第二个文件(目标)被正确读取(逐行,即1和2),在第一个(源)中,只读取第一行(即1).
最可能的问题在于for循环.我虽然运营商";" 表现得像"&&",因此应该从两个文件中读取一行.我试过替换";" 通过"&&"但它没有用.
任何线索将深深感激!托马斯
您可以压缩它们并迭代线对:
def main(args: Array[String]){
val source = Source.fromFile(args(0)).getLines
val target = Source.fromFile(args(1)).getLines
for ((s,t) <- source.zip(target)) {
println(s + " =source| target= " + t);
}
}
Run Code Online (Sandbox Code Playgroud)
您的方法的问题是,(x < - xs,y < - ys)编写的代码会产生笛卡尔积.在你的情况下,只要遍历第一个迭代器,它就会停止产生产品项目(请记住 - 迭代器只能遍历一次).
UPDATE.
你的for循环在java/C++/...中是模拟的:
for(int i = 0; i < source.length; i++)
for(int j = 0; j < target.length; j++) {
String s = source[i];
String t = target[j];
// println ....
}
Run Code Online (Sandbox Code Playgroud)
(除了那个事实,上面我没有使用过迭代器)