Scala:从Array [String]到Array [Array [String]]

时间:2015-05-27 15:36:13

标签: arrays scala multidimensional-array

我在scala中有一个Array[String]

my_array: Array[String] = Array(RED;BLUE, RED;PINK, RED;ORANGE, RED;WHITE, RED;YELLOW, 
RED;GREY,GREEN;BLUE, GREEN;PINK, GREEN;BROWN, GREEN;ORANGE, GREEN;WHITE, GREEN;YELLOW, GREEN;GREY)

我需要得到这个结果

my_new_array: Array[Array[String]] = Array(Array(RED;BLUE, RED;PINK, RED;ORANGE, RED;WHITE,RED;YELLOW, RED;GREY), 
Array(GREEN;BLUE, GREEN;PINK, GREEN;BROWN, GREEN;ORANGE, GREEN;WHITE, GREEN;YELLOW, GREEN;GREY), 
Array(RED;BLUE, GREEN;BLUE), Array(RED;PINK, GREEN;PINK), 
Array(RED;ORANGE, GREEN;ORANGE), Array(RED;WHITE, GREEN;WHITE),    
Array(RED;YELLOW, GREEN;YELLOW), Array(RED;GREY, GREEN;GREY))

这些应该是步骤

  • 获取唯一颜色列表。这意味着我必须分开“;”每个字符串
  • 一旦我有了这个列表,我就必须创建一个包含按每种颜色分组的原始字符串的新数组

有人有提示吗?

1 个答案:

答案 0 :(得分:3)

如果我已正确理解您的问题,这应该有效(可能不是最有效的解决方案)

myArray
.flatMap(_.split(';'))                      // get all the colors
.distinct                                   // get the unique set of colors
.map(color => myArray.filter(_.contains(color)))  // map each color to each group containing it

我使用contains假设"YELLOW"您想要同时匹配"YELLOW";"RED""RED";"YELLOW"

如果您只想匹配前者,可以使用startsWith intead。