在Scala中填充向量
我是新来的在Scala中填充向量,scala,vector,Scala,Vector,我是新来的Scala 我有一个向量,在一个名为句子的类中: val tree: Option[Vector[Node]] 此类的构造函数接收单词的数组[String]。对于每个单词,我必须创建一个节点对象(我创建的一个类),然后用所有节点填充向量 我正在尝试填充树,但在编写代码时遇到问题。我试过使用: private val tree: Option[Vector[Node]] = words.foreach(w => new Node(w, 9, "d", 0)) priv
Scala
我有一个向量
,在一个名为句子
的类中:
val tree: Option[Vector[Node]]
此类的构造函数接收单词的数组[String]
。对于每个单词,我必须创建一个节点
对象(我创建的一个类),然后用所有节点填充向量
我正在尝试填充树
,但在编写代码时遇到问题。我试过使用:
private val tree: Option[Vector[Node]] =
words.foreach(w => new Node(w, 9, "d", 0))
private val tree: Option[Vector[Node]] =
words.foreach(w => tree :: new Node(w, 9, "d", 0))
我也尝试过使用map
,但它不起作用
如何为每个单词创建一个节点
,并将其添加到向量
注意:如果您需要更多代码,请告诉我,我会更新问题。简单地说:
// map each word to a Node
val tree: Array[Node] = words.map(w => new Node(w, 9, "d", 0))
如果需要向量
:
val treeVector: Vector[Node] = tree.toVector
选项
没有带来太多好处,因为它相当于emty向量
,只是:
// map each word to a Node
val tree: Array[Node] = words.map(w => new Node(w, 9, "d", 0))
如果需要向量
:
val treeVector: Vector[Node] = tree.toVector
选项
没有带来多少好处,因为它相当于emty向量
问题在于您使用的是foreach
。对于数组[A]
,foreach
具有签名def foreach(f:(A)⇒ 单位):单位
。这里参数函数f
的返回类型是Unit
,这意味着它不应该返回任何东西,只需要对数组中的每个元素执行一些操作(如打印)
您正在寻找的是一个具有签名的defmap[B](f:(a)的map
⇒ B) :数组[B]
。这里参数函数f
的返回类型是B
,这意味着它应该返回B
类型的实例。因此,对于A
类型的每个元素,map
将应用f
来计算B
类型的实例
val newArray: Array[Node] = words.map(w => new Node(w, 9, "d", 0))
val newVector: Vector[Node] = newArray.toVector
val optVector: Option[Vector[Node]] = Option(newVector)
// Or
val optVector = Option(words.map(w => new Node(w, 9, "d", 0)).toVector)
问题是您正在使用
foreach
。对于数组[A]
,foreach
具有签名def foreach(f:(A)⇒ 单位):单位
。这里参数函数f
的返回类型是Unit
,这意味着它不应该返回任何东西,只需要对数组中的每个元素执行一些操作(如打印)
您正在寻找的是一个具有签名的defmap[B](f:(a)的map
⇒ B) :数组[B]
。这里参数函数f
的返回类型是B
,这意味着它应该返回B
类型的实例。因此,对于A
类型的每个元素,map
将应用f
来计算B
类型的实例
val newArray: Array[Node] = words.map(w => new Node(w, 9, "d", 0))
val newVector: Vector[Node] = newArray.toVector
val optVector: Option[Vector[Node]] = Option(newVector)
// Or
val optVector = Option(words.map(w => new Node(w, 9, "d", 0)).toVector)
foreach
返回Unit
,因此它肯定无法工作。此外,您的树
属于选项[Vector[Node]]
类型,您只需将节点
放入其中即可。编辑:Jean发布了一个即时回答。foreach
返回Unit
,因此它肯定不会工作。此外,您的树
属于选项[Vector[Node]]
类型,您只需将节点
放入其中即可。编辑:Jean给出了一个正确的答案。谢谢!,这就成功了:private-val-tree:Vector[Node]=words.map(w=>new-Node(w,9,“d”,0))。toVector
有没有一种方法可以使用两个变量进行映射?类似这样:(单词,标记).map((w,t)=>新节点(w,t,“d”,0))
?如果单词和标记的内容是同步的(因此单词的第n个元素与标记的第n个元素相关),您可以使用words.zip(标记),它生成对应对的新序列,然后您可以根据自己的要求生成,例如words.zip(标记).map((w,t)=>新节点(w,t,“d”,0))谢谢!,这就成功了:private-val-tree:Vector[Node]=words.map(w=>new-Node(w,9,“d”,0))。toVector
有没有一种方法可以使用两个变量进行映射?类似这样:(单词,标记).map((w,t)=>新节点(w,t,“d”,0))
?如果单词和标记的内容是同步的(因此单词的第n个元素与标记的第n个元素相关),您可以使用words.zip(标记),它生成对应对的新序列,然后您可以根据自己的要求生成,例如words.zip(标记).map((w,t)=>新节点(w,t,“d”,0))