Ich versuche, ein Set mit ersten Spalte aller Dateien zu erstellen und hashmap für jede Dateien mit ersten Spalte als Schlüssel und die zweite Spalte als Wert zu erstellen .Traverse Setzen Sie Elemente und erhalten Sie Werte als Schlüssel aus einer Hashmap mit Scala
Mit diesem Set möchte ich die Werte für die Hashmap überprüfen, aber wenn in dieser hashmap für diese Datei kein solcher Schlüssel vorhanden ist, muss er "0" als Werte für diesen Schlüssel in der neuen Hashmappe angeben. Es muss für jede Datei eine neue Hashmap haben.
//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)
}
Zum Beispiel eine Datei,
#comments
ABC 2
ABN 7
CVF 9
Datei b
#Comments
#
#
ABC 1
DFG 2
CVF 3
Ausgang:
Map(ABC -> 2, ABN -> 7, CVF -> 9)
Map(ABC -> 1, ABN -> 7, CVF -> 3, DFG -> 2)
gewünschte Ausgabe:
Map(ABC -> 2, ABN -> 7, CVF -> 9,DFG -> 0)
Map(ABC -> 1, ABN -> 0, CVF -> 3, DFG -> 2)
Nathaniel, ich Ihre Antwort zu schätzen wissen. Obwohl es mir nicht die gewünschte Leistung bringt, wird es wertvoll sein, weitere Fortschritte zu machen. Ich muss mich um die Dateien kümmern, da ich versuche, eine Python-Skriptfunktionalität zu replizieren, um Scala zu lernen. – deepseas
Eigentlich funktioniert es. Mein Fehler. Sie müssen nur die Datei "file1.getOrElse (key, 0))" in "file.getOrElse (key, 0))" in def def ProduceMap ändern. – deepseas
@deepseas Ich sage nicht, importieren Sie nicht die Dateien, ich sage, erhalten Sie zuerst eine Kartendarstellung der Dateien, und dann sorgen Sie sich über die Manipulation von ihnen, anstatt beide auf einmal zu tun. –