列表连接在scala中不起作用

时间:2018-03-21 15:41:00

标签: scala list scala-collections

我正在尝试使用下面的代码在循环中连接scala列表。

var names: List[String] = Nil
val cluster_id = List("149095311_0", "149095311_1")
for (id <- cluster_id) {
  val influencers_name = searchIndex(s"id : $id", "id", "influencers", searcher)
  println("In Loop " + influencers_name)
  names :::= influencers_name
}
for(n <- names) println("List element -> " + n) 

但是当我迭代最终列表时,它会给我个别列表而不是连接列表的各个元素。

以下是上述代码的O / P:

In Loop List(kroger 10TV DispatchAlerts)
In Loop List(kroger seanhannity SenTedCruz)
List element -> kroger seanhannity SenTedCruz 
List element -> kroger 10TV DispatchAlerts 

3 个答案:

答案 0 :(得分:1)

您的代码不是很有用,因为您正在改变变量。以下更优雅:

def searchIndex(s: String): List[String] = {
  if (s == "149095311_0") List("kroger 10TV DispatchAlerts")
  else List("kroger seanhannity SenTedCruz")
}

val cluster_id = List("149095311_0", "149095311_1")

val names = cluster_id.foldLeft(List[String]()) {
  (acc, id) => acc ++ searchIndex(id)
}

for(n <- names) println("List element -> " + n)

其中&#39; ++&#39;用于连接两个列表的元素。

答案 1 :(得分:0)

看起来问题在于searchIndex方法正在使用包含由空格分隔的所有值的单个String检索List [String],修复该方法以确保它检索每个值具有一个elemente的List

要检查这是否正确,请尝试此操作,这只是一种解决方法,您应该修复searchIndex

var names: List[String] = Nil
val cluster_id = List("149095311_0", "149095311_1")
for (id <- cluster_id) {
  val influencers_name = searchIndex(s"id : $id", "id", "influencers", searcher).flatMap(_.split(' '))
  ("In Loop " + influencers_name)
  names = influencers_name ::: names
}
for(n <- names) println("List element -> " + n) 

答案 2 :(得分:0)

原因是, 当你做名字::: List(“任何”) - &gt;它不会给名字添加任何东西。 相反,它会创建一个新的集合。 例如,

ThreadLocal

当我添加“Mahesh”时,它创建了新的集合命名res0。 当我再次添加不同的字符串时,这里“chand”它创建了另一个集合。但是当我向创建的集合添加“chand”时,它已连接到正确的集合,

你可以实现你想做的事,

scala> var names: List[String] = Nil
names: List[String] = List()

scala> names ::: List("mahesh")
res0: List[String] = List(mahesh)

You can achive that

scala> names ::: List("chand")
res1: List[String] = List(chand)

scala> res0 ::: List("chand")
res2: List[String] = List(mahesh, chand)