1
すべてのファイルの最初の列を使用して作成したセットを使用し、最初の列をキーに、 。Scverseを使用してハッシュマップのキーとしてキーを使用して値を取得する
このセットを使用して、ハッシュマップの値をチェックしたいが、そのファイルのハッシュマップにそのようなキーがない場合は、そのキーの値として新しいハッシュマップに「0」を入れる必要があります。各ファイルに新しいハッシュマップが必要です。
//Set for storing
var ids : Set[String] = collection.immutable.HashSet()
//Hashmap for storing
var id:Map[String,String] = collection.immutable.Map()
for (arg<-args){
ids ++= Source.fromFile(arg)
.getLines()
.filterNot(_.trim.startsWith("#"))
.map(_.split("\t")(0))
}
//Create hash map for each file
for (arg<-args){
id ++= Source.fromFile(arg).getLines()
.filterNot(_.trim.startsWith("#"))
.map { l =>
val Array(k,v1,_*)= l.split("\t")
k-> (v1)}.toMap
val filtered = id.filter(i =>
ids.contains(i._1))
println(filtered)
}
例えばファイル、
#comments
ABC 2
ABN 7
CVF 9
ファイルB
#Comments
#
#
ABC 1
DFG 2
CVF 3
出力:
Map(ABC -> 2, ABN -> 7, CVF -> 9)
Map(ABC -> 1, ABN -> 7, CVF -> 3, DFG -> 2)
所望の出力:
Map(ABC -> 2, ABN -> 7, CVF -> 9,DFG -> 0)
Map(ABC -> 1, ABN -> 0, CVF -> 3, DFG -> 2)
ナサニエル、私はあなたの応答を感謝しています。それは私に望ましい出力を与えませんが、それ以上の進歩をする価値があります。 Scalaを学ぶためのPythonスクリプト機能を複製しようとしているので、ファイルについて心配する必要があります。 – deepseas
実際に動作します。私の悪い。 ProduceMapのdefファイルの "file1.getOrElse(key、0))"を "file.getOrElse(key、0)"に変更するだけです。 – deepseas
@deepseas私はファイルをインポートしないと言っているわけではありません。ファイルのマップ表現を最初に取得し、一度に両方を行うのではなく、それらを操作することを心配しています。 –