gpt4 book ai didi

scala - 在 Scala 中一次(逐行)读取 2 个文件

转载 作者:行者123 更新时间:2023-12-04 02:00:15 27 4
gpt4 key购买 nike

我是 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 =来源|目标= 1
1 =来源|目标= 2

但是,我希望:

1 =来源|目标= 1
2 =来源|目标= 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);
}
}

你的方法的问题是像 for(x <- xs, y <- ys) 这样编写的代码产生笛卡尔积。在您的情况下,只要遍历第一个迭代器,它就会停止产生产品项(请记住 - 迭代器只能遍历一次)。

更新。

你的 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 ....
}

(除此之外,上面我没有使用迭代器)

关于scala - 在 Scala 中一次(逐行)读取 2 个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13823191/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com