我正在使用文本文件中的以下列表:
10,44,22
10,47,12
15,38,3
15,41,30
16,44,15
16,47,18
22,38,21
22,41,42
34,44,40
34,47,36
40,38,39
40,41,42
45,38,27
45,41,30
46,44,45
46,47,48
我正在创建一些索引来分析表格,然后如果每列都是(s,p,o)并且我创建了一个P - >的地图。所以我创建它的形式
val dicP_SO: scala.collection.mutable.Map[Int, Vector[Vector[Int]]] = collection.mutable.Map[Int, Vector[Vector[Int]]]()
我读了文件,用
创建了映射if (dicP_SO.contains(p)) {
P_SO = dicP_SO.apply(p) :+ Vector(s, o) //To add to the same key the diff
dicP_SO += (p -> P_SO) //(s,o)
}else dicP_SO += (p -> Vector(Vector(s,o)))
这样,如果我把38作为键,我运行以下代码:
dicP_SO.getOrElse(38,Vector(0))
我得到以下内容:
Vector(Vector(15, 3), Vector(22, 21), Vector(40, 39), Vector(45, 27))
我的问题如下:我需要内部的每个向量[Int],我尝试声明一个变量
val a:Vector[Int] = dicP_SO.getOrElse(yi,Vector(0))
我收到Vector [Any]不符合Vector [Int]的错误,我不知道为什么会出现这个错误以及如何修复它
答案 0 :(得分:0)
由于public static bool validate_login(string user, string pass)
{
Login_Model.connect = DB_Controller.db_connection();
MySqlCommand cmd = new MySqlCommand(Login_Model.connect);
}
返回类型为:dicP_SO.getOrElse(38,Vector(0))
,当您将其分配给Vector[Any]
时,编译器会抛出错误。
您可以通过以下方式完成:
Vector[Int]
使用dicP_SO.get(38).map(_.flatten).getOrElse(Vector(0)) //flatten nest Vector[Vector[Int]] to Vector[Int], and `getOrElse`
展开嵌套集合:
flatten
答案 1 :(得分:0)
您应该已经拥有了所需的输出,只需要一种正确的方式来访问它们
scala> val rdd = dicP_SO.getOrElse(38, Vector(0))
rdd: scala.collection.immutable.Vector[Any] = Vector(Vector(15, 3), Vector(22, 21), Vector(40, 39), Vector(45, 27))
scala> rdd.foreach(println)
Vector(15, 3)
Vector(22, 21)
Vector(40, 39)
Vector(45, 27)
<强>被修改强>
如果要访问每个向量并分配给变量,可以执行
scala> val v1 = rdd(0)
v1: Any = Vector(15, 3)
scala> println(v1)
Vector(15, 3)
答案 2 :(得分:0)
您遇到编译错误的原因是地图中的值的类型为<?xml version="1.0"?>
<Telefonliste>
<Eintrag>
<Name>Meier</Name>
<TelNr>891234</TelNr>
</Eintrag>
<Eintrag>
<Name>Schmitz</Name>
<TelNr>870887</TelNr>
</Eintrag>
</Telefonliste>
。因此,当您执行Vector[Vector[Int]]
时,getOrElse(yi, Vector(0))
值将具有类型Vector(0)
,因此编译器将尝试引用两种类型的返回类型(Vector[Int]
和{{ 1}})为Vector[Vector[Int]]
。
鉴于你拥有的数据,我建议使用这些数据结构和代码:
Vector[Int]
然后插入新信息:
Vector[Any]
检索密钥val dicP_SO: mutable.Map[Int, List[(Int, Int)]] = mutable.Map[Int, List[(Int, Int)]]()
的信息:
val currentValues = if (dicP_SO.contains(p)) {
dicP_SO.remove(p)
} else {
List.empty[(Int, Int)]
}
dicP_SO += p -> currentValues :+ (s, o)
然后您可以根据需要处理信息,例如:
yi