在scala中按时(逐行)读取2个文件
发布时间:2020-12-16 09:53:03 所属栏目:安全 来源:网络整理
导读:我是 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= " + li
我是
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 .... } (除了那个事实,上面我没有使用过迭代器) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |