У меня есть var permutedTables = HashMap[List[Int], List[String, String]]
, определенный глобально. Сначала я заполняю Hashmap ключами в методе, который работает.Scala: изменчивый HashMap не обновляется внутри цикла
print(permutedTables) :
Map(List(1,2,3,4) -> List(),
List(2,4,5,6) -> List(), etc...)
Проблема возникает, когда я хочу, чтобы обновить значения (пустые списки) в HashMap внутри для цикла (внутри второго способа). Другими словами, я хочу добавить кортежи (String, String) в List() для каждого ключа.
for(pi_k <- permutedTables.keySet){
var mask = emptyMask;
mask = pi_k.foldLeft(mask)((s, i) => s.updated(i, '1'))
val maskB = Integer.parseInt(mask,2)
val permutedFP = (intFP & maskB).toBinaryString
// attempt 1 :
// permutedTables(pi_k) :+ (url, permutedFP)
// attempt 2 :
// permutedTables.update(pi_k, permutedTables(pi_k):::List((url, permutedFP)))
}
Значения не обновляются. У меня все еще есть пустые списки в качестве значений. Я не понимаю, что не так с моим кодом.
РЕДАКТИРОВАТЬ 1: Когда слово print(permutedTables)
после того, как любой из двух попыток (внутри цикла), значение, похоже, обновляется, но когда я называть его вне цикла, списки являются пустыми
РЕДАКТИРОВАТЬ 2: Вторая попытка в моем коде, кажется, работает сейчас (!). Но почему сначала не работает?
Привет, Алексей, у меня есть аналогичная проблема. После просмотра сообщения я изменил свой код на использование update(), добавив в HashMap val tempLHM = new HashMap [String, String] // [edge, vertex] pit.foreach {x => val pp = x.getList (0) .iterator()/ while (pp.hasNext()) { val pitcol = pp.next(). ToString(). Split ("\\ s +") tempLHM.update (pitcol.apply (0) .toString(), pitcol.apply (2) .toString()) // level0 ppin отображается как edge-> vertex println (tempLHM.size)}} println (tempLHM.size) – user1384205
Пожалуйста, не то, чтобы первая печать stmt внутри цикла while печатает размер правильно, но stmt на последней строке печатает 0. – user1384205
@ user1384205 Лучше спросите отдельный вопрос, это невозможно прочитать. –