Я совершенно новичок в программировании на Scala, и у меня возникла следующая проблема:
Мне нужен HashMap, который может содержать много типов данных (Int, String и т. Д.).В C ++ я бы использовал MultiMap от BOOST.Я слышал, что в Scala есть черта MultiMap.В основном я хочу следующее:
val map = HashMap[String, ListBuffer[_]]
Конкретный тип данных элементов ListBuffer должен быть определен во время выполнения.Когда я тестирую эту реализацию в консоли, работает следующее:
scala> val a = new HashMap[String, ListBuffer[_]]()
a: scala.collection.mutable.HashMap[String,scala.collection.mutable.ListBuffer[_]] = Map()
scala> val b = new ListBuffer[String]()
b: scala.collection.mutable.ListBuffer[String] = ListBuffer()
scala> val c = new ListBuffer[Int]()
c: scala.collection.mutable.ListBuffer[Int] = ListBuffer()
scala> b += "String"
res0: b.type = ListBuffer(String)
scala> c += 1
res1: c.type = ListBuffer(1)
scala> a += "String Buffer" -> b
res2: a.type = Map((String Buffer,ListBuffer(String)))
scala> a += "This is an Int Buffer" -> c
res3: a.type = Map((String Buffer,ListBuffer(String)), (This is an Int Buffer,ListBuffer(1)))
Так что в основном это работает.Мой первый вопрос: есть ли возможность реализовать такое же поведение в Scala без использования ListBuffer в качестве слоя косвенности.
Например, получение карты со следующим содержимым: Map ((String, 1), (String, "String value"), ...)
Когда я сейчас пытаюсь использовать реализацию ListBuffer-выше, я получаю следующую ошибку несоответствия типов:
found : _$1 where type _$1
required: _$3 where type _$3
Яв основном пытаюсь сделать следующее:
Я использую итератор для перебора ключей карты:
var valueIds = new ListBuffer[Int]()
val iterator = map.keys
iterator.foreach(key => { valueIds += setValue((map.apply(key)).last) }
setValue возвращает Int и является методом, который должен что-то делать с последним элементом ListBuffers.
Кто-нибудь знает, как исправить вышеупомянутое несоответствие типов?
Спасибо за вашу помощь!
С уважением