Добавить Map [String, String] () в массив или список с типом [String] в Scala - PullRequest
0 голосов
/ 06 октября 2019

Я сохранил свой ключ, пары значений в нескольких изменяемых картах с помощью MapString, String. И я вижу ключ и ценности в нем. Однако теперь мне нужно добавить эти карты в ArrayBuffer или List со String Type в Scala. Так что я могу перебрать каждый элемент в массиве и продолжить. Пожалуйста, помогите.

Пример кода.

val X= scala.collection.mutable.Map[String, String]()

  X += ("Name" -> "Raghav")
  X += ("Home" -> "Gurgaon")

val Y= scala.collection.mutable.Map[String, String]()

  Y += ("Name" -> "Vikrant")
  Y += ("Home" -> "Noida")

var JobConfigs = scala.collection.mutable.ArrayBuffer.empty[String]

JobConfigs += X
JobConfigs += Y

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Из вашего комментария:

проблема с метанием - for (e <- JobConfigs) { for ((k, v) <- e) { println("Key:" + k + ", Value:" + v) } }

Это не имеет смысла;поскольку ваш JobConfigs является ArrayBuffer[String], e будет String и не содержит пар. Это будет работать , без каких-либо изменений, если вы измените тип JobConfigs:

var JobConfigs = scala.collection.mutable.ArrayBuffer.empty[Map[String, String]]

В качестве альтернативы, вы можете иметь

var JobConfigs = scala.collection.mutable.ArrayBuffer.empty[(String, String)]
JobConfigs ++= X
JobConfigs ++= Y

for ((k, v) <- JobConfigs) { println("Key:" + k + ", Value:" + v) }

Примечания:

  1. JobConfigs должен быть объявлен как val, если вы позже не сделаете JobConfigs = .... Даже если это так, часто это не очень хорошая идея.

  2. Идиоматические имена локальных переменных начинаются со строчной буквы: x, y, jobConfigs.

0 голосов
/ 06 октября 2019

Другой подход с использованием case-классов.

case class Person(Name: String, Home: String)

var JobConfig = scala.collection.mutable.ArrayBuffer[Person]()

JobConfig += Person("Raghav", "Gurgaon")
JobConfig += Person("Vikrant", "Noida")

for(i <- JobConfig){
  println(s"home :${i.Home} , name : ${i.Name}")
}

Output: 
home :Gurgaon , name : Raghav
home :Noida , name : Vikrant 
0 голосов
/ 06 октября 2019

Следующий код добавит неизменный объект Map в ArrayBuffer.

JobConfigs += X

Вы можете попытаться вставить изменяемый объект, например так:

JobConfigs.append(X.toMap)

Не знаете, зачем вам нуженчтобы преобразовать карту в строку, я бы посоветовал вам сохранить карту, которая лучше подходит для доступа к значениям. Но вот фрагмент кода для преобразования карты в строку:

Map("ss" -> "yy", "aa" -> "bb").map{case (k, v) => k + ":" + v}.mkString("|")

Надеюсь, это поможет. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...