Jose Cabrera Zuniga
Jose Cabrera Zuniga

Reputation: 2637

Split string to a 2-dimensional array in Scala

In Scala: Is there a way to directly split a string that contains 72 numeric values separated by ; into a 2-dimensional array of 9 rows and 8 columns with those numeric values -in numeric data type-?

Upvotes: 0

Views: 367

Answers (2)

stack0114106
stack0114106

Reputation: 8791

using Range and grouped functions

scala> val a = (0 to 71).map(_.toString).toArray.mkString(";")
a: String = 0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71

scala> a.split(";").map(_.toInt).sliding(9,9).toArray
res269: Array[Array[Int]] = Array(Array(0, 1, 2, 3, 4, 5, 6, 7, 8), Array(9, 10, 11, 12, 13, 14, 15, 16, 17), Array(18, 19, 20, 21, 22, 23, 24, 25, 26), Array(27, 28, 29, 30, 31, 32, 33, 34, 35), Array(36, 37, 38, 39, 40, 41, 42, 43, 44), Array(45, 46, 47, 48, 49, 50, 51, 52, 53), Array(54, 55, 56, 57, 58, 59, 60, 61, 62), Array(63, 64, 65, 66, 67, 68, 69, 70, 71))

scala>

Upvotes: 1

Andrey Tyukin
Andrey Tyukin

Reputation: 44992

val input = List.tabulate(72)(_.toString).mkString(";")
input.split(";").map(_.toInt).grouped(9).toArray

transforms

0;1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71

into

Array(
  Array(0, 1, 2, 3, 4, 5, 6, 7, 8), 
  Array(9, 10, 11, 12, 13, 14, 15, 16, 17), 
  Array(18, 19, 20, 21, 22, 23, 24, 25, 26), 
  Array(27, 28, 29, 30, 31, 32, 33, 34, 35), 
  Array(36, 37, 38, 39, 40, 41, 42, 43, 44), 
  Array(45, 46, 47, 48, 49, 50, 51, 52, 53), 
  Array(54, 55, 56, 57, 58, 59, 60, 61, 62), 
  Array(63, 64, 65, 66, 67, 68, 69, 70, 71)
)

If you want to swap the dimensions of rows/columns, replace 9 by 8.

Upvotes: 4

Related Questions