2016-10-21 5 views
0

에지도한다. foreach가 될 수있는 Array [String]을 얻은 다음 "="로 나눌 수있는 키와 값을 사용하여 Map을 구성하는 방법을 알고 있습니다.변환 명령 행 인수 키 = 값 쌍은 내가 좋아하는 입력을받을 내 메인 프로그램에서 스칼라

이 기능을 구현하는 데 유용한 기능과 판독 방법이 있습니까? 또한 변경 가능한 Map을 피할 수 있으면 좋을 것이며 초기 더미 값 초기화를 피하고 싶습니다.

def initialize(strings: Array[String]): Unit = { 
    val m = collection.mutable.Map("dummy" -> "dummyval") 
    strings.foreach(
     s => { 
     val keyVal:Array[String] = s.split("=") 

     m += keyVal(0) -> keyVal(1) 

     }) 
    println(m) 
    } 

답변

2

toMap()을 사용할 수 있습니다.

그러나 튜플에 배열로 변환하는 것은 아주 사소한되지 않습니다 : How to convert an Array to a Tuple?

scala> val ar = Array("key1=value1","key2=value2") 
ar: Array[String] = Array(key1=value1, key2=value2) 

scala> ar.collect(_.split("=") match { case Array(x,y) => (x,y)}).toMap 
res10: scala.collection.immutable.Map[String,String] = Map(key1 -> value1, key2 -> value2) 

은 어쩌면 당신은 위의 유사

val r = ar.collect(Function.unlift(_.split("=") match { case Array(x, y) => Some(x, y)})).toMap 
+0

intellij에서 "해당 참조로 수집 할 수없는 참조를 해결할 수 없습니다."오류가 발생했습니다. –

+0

더 정확한 오류 유형 불일치, 예상 PartialFunction [String, NotInferedB], 실제 (Any) => (T, T) –

+0

예 .. 정말 고마워요. intellij가이 문제를 해결할 수 있는지 궁금합니다. –

1

을 인 IntelliJ 만

'지도'를 사용에 대한 Function.unlift를 호출해야
ar.map(_.split("=")).map(a=>(a(0), a(1))).toMap 
+0

아래 내 의견을 참조하십시오. 컴파일 시간 오류가 발생합니다. –

+0

그 다음 IDE에서 File-> Invalidates caches를 사용하고 다시 시작하십시오. 당신은 항상 당신의 IDE가 당신을 망치고 있지 않은지 확인하기 위해 스칼라 repl의 한 라인 솔루션을 확인할 수 있습니다 :) – freakman

0

Scopt은 명령 줄 인수 구문 분석을 깔끔하게 처리합니다.

+0

u는 항상 당신의 편의에 따라 오픈 소스를 사용할 수있는 사치를 가지고 있지 않습니다 :) –

+0

그것은 내 친구의 제안이었습니다. :) –