scala - What data type do I get when I iterate over a map? -
scala - What data type do I get when I iterate over a map? -
i have application has gather external info first, turn them objects. afterwards, analysis on data.
i managed gather info , set map. map contains unique key each of future objects, , listbuffer of info needed build object.
now want create list of objects map, , don't know how info out of map. haven't worked maps before (yes, new language), found a question says that, when want access element of map head, tuple of key , value. hoped same when iterate on map map (the method), doesn't appear work. , looked in programming scala, couldn't find place saying when iterate on map.
here mwe want do:
//this code gather number names different languages , create objects of type number containing each name. import scala.collection.mutable import scala.collection.mutable.listbuffer class number (val thenumber: int, val names: list[string]) { override def tostring = thenumber + " known " + names.mkstring(", ") + "." } // build map holding illustration info val numbersasmap = mutable.map.empty[int, listbuffer[string]] numbersasmap += (1 -> new listbuffer[string]) numbersasmap += (2 -> new listbuffer[string]) numbersasmap += (3 -> new listbuffer[string]) numbersasmap(1) += "one" numbersasmap(1) += "eins" numbersasmap(1) += "uno" numbersasmap(2) += "two" numbersasmap(2) += "zwei" numbersasmap(2) += "due" numbersasmap(3) += "three" numbersasmap(3) += "drei" numbersasmap(3) += "tre" // create list of numbers numbersasmap map ((key, value) => new number(key, value.tolist)).tolist // error: missing parameter type // i'm not getting tuples, let's seek way numbersasmap.keys map (key => new number(key, numbersasmap(key).tolist)).tolist // throws same error above :(
the map method of map complies map method of other collections, it's body gets 1 parameter. in case of map, tuple consisting of key , value.
so can write:
numbersasmap.map(kv => new number(kv._1, kv._2.tolist)).tolist if want name tuple values:
numbersasmap.map { kv => val (key, value) = kv new number(key, value.tolist) }.tolist but there alternative write nicely in single line: utilize partial function:
numbersasmap.map { case (key, value) => new number(key, value.tolist) }.tolist a { case ... } defines partial function; , way can extract values of tuple.
scala
Comments
Post a Comment