在scala中按时(逐行)读取2个文件

我是 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);
}
}

如果源文件和目标文件包含普通数字:1,2(每行一个数字),结果为:


    1 =source| target= 1 
    1 =source| target= 2

但是,我希望:


    1 =source| target= 1 
    2 =source| target= 2

问题:第二个文件(目标)被正确读取(逐行,即1和2),在第一个(源)中,只读取第一行(即1).

最可能的问题在于for循环.我虽然操作符“;”表现得像“&&”因此,应该从两个文件中读取一行.我试过替换“;”通过“&&”但它不起作用.

任何线索将深深感激!托马斯

解决方法

你可以 zip和迭代线对:

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);
  }
}

你的方法的问题是,为(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 ....
  }

(除了那个事实,上面我没有使用过迭代器)

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...