Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中填充向量_Scala_Vector - Fatal编程技术网

在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))