0

文字列からいくつかの値を抽出しようとしています。文字列には、値を持つ複数の行が含まれています。各行の値は、番号、姓、名です。次に、特定のパターンでフィルタリングし、重複した番号を削除したいと考えています。

これは私のテストです:

test("Numbers should be unique") {
    val s = Cool.prepareListAccordingToPattern(ALLOWED_PATTERN, "1234,örjan,nilsson\n4321,eva-lisa,nyman\n1234,eva,nilsson")
    assert(s.length == 2, "Well that didn't work.. ")
    info("Chopping seems to work. Filtered duplicate numbers. Expected 1234:4321, got: "+s(0)(0)+":"+s(1)(0))
  }

メソッド:

def prepareListAccordingToPattern(allowedPattern: String, s: String) : Array[Array[String]] = {
    val lines = chop("\n", s)
    val choppedUp = lines.map(line =>
      chop(",", line)).filter(array =>
        array.length == 3 && array(0).matches(allowedPattern)
      )    
    choppedUp
}

def chop(splitSymbol: String, toChop: String) : Array[String] = {
    toChop.split(splitSymbol)
  }

重複のある多次元配列を受け取るため、テストは期待どおりに失敗します。

[0]["1234","オルヤン","ニルソン"]

[1]["4321","エヴァ リサ","ナイマン"]

[2]["1234","エヴァ","ニルソン"]

私がやりたいのは、重複した数字、この場合は「1234」を除外して、 元に戻すことです。

[0]["1234","オルヤン","ニルソン"]

[1]["4321","エヴァ リサ","ナイマン"]

これをscalaの方法で行うにはどうすればよいですか? 多分私はこの問題を別の方法で攻撃できますか?

4

2 に答える 2

0

少し暗黙的ですが、動作するはずです:

val arr = Array(
     Array("1234","rjan","nilsson"),
     Array("4321","eva-lisa","nyman"),
     Array("1234","eva","nilsson")
     )
arr.view.reverse.map(x => x.head -> x).toMap.values
// Iterable[Array[String]] = MapLike(Array(1234, rjan, nilsson), Array(4321, eva-lisa, nyman))

ここを逆にして、"eva","nilsson" を "rjan","nilsson" でオーバーライドします。その逆ではありません

于 2013-06-27T10:19:13.677 に答える