私はList[List[]]
List(List(1,2), List(3,4))
私はそれを呼び出すtoString()
場合
List(List(1,2), List(3,4)).toString()
はいの場合、元に戻すことは可能List[List[]]
ですか?どのように?
ありがとう。
Scalaでは、Java(およびPythonでさえ、ライブラリは通常慣例に従いますが)と同様に.toString
、コンパイルされてオブジェクトを再作成するものが生成されるという保証はありません。実際、やなどの一般的な型は、Long
それらString
を再作成するために使用できる文字列出力を生成しません。
インスタンスの再作成に使用できる出力を生成する標準的な方法は、シリアル化によるものであることに注意してください。それがあなたが望むものなら、それを調べてください。
から取得した文字列を解析したいだけですtoString
か? その場合、これを行うためのネイティブな方法はありません (たとえば、Pythoneval
や Haskell のように) が、 Scala パーサー コンビネーター ライブラリread
を使用して独自の方法を非常に簡単に作成できます。
import scala.util.parsing.combinator._
object parseIntListList extends RegexParsers {
def list = "List(" ~> repsep("\\d+".r ^^ (_.toInt), ",") <~ ")"
def apply(s: String) = parse("List(" ~> repsep(list, ",") <~ ")", s)
}
今parseIntListList(List(List(1, 2), List(3, 4)).toString)
ではあなたが望むことを行い、パーサーは余分な空白などに対して堅牢です.
ただし、Scala でやろうとしていることは何でも、より良い方法があることはほぼ間違いありません。
それがIntのリストのリストであることを知っていますか?
val li = List(List(1,2), List(3,4))
val s = li.toString
s.replaceAll ("[^0-9) ]", "").split ("\\)").map(_.split (" ").filterNot (_.equals ("")).map (_.toInt).toList).toList
res86: List[List[Int]] = List(List(1, 2), List(3, 4))