2016-07-24 2 views
0

저는 스칼라에 익숙하지 않고 아래 코드를 리펙토링하려고합니다. 아래 코드에서 사용 된 "인덱스"를 제거하고 배열을 반복하려면 데이터를 가져 오십시오. 예를 들어 배열에서 스칼라를 반복하는 가장 좋은 방법은 무엇입니까

subgroupMetricIndividual.instances.foreach { instanceIndividual => 
    val MetricContextListBuffer: ListBuffer[Context] = ListBuffer() 
    var index = 0 
    contextListBufferForSubGroup.foreach { contextIndividual => 
     MetricContextListBuffer += Context(
       entity = contextIndividual, 
       value = instanceIndividual(index).toString 
     ) 
     index += 1 
    } 
} 

, 변수의 값은 아래와 같은 경우 :

contextListBufferForSubGroup = ("context1","context2") 
subgroupMetricIndividual.instances = {{"Inst1","Inst2",1},{"Inst3","Inst4",2}} 

그런 상황이 있어야 할 무엇인가 :

{ 
    entity: "context1", 
    value: "Inst1" 
    }, 
    { 
    entity: "context2", 
    value: "Inst2" 
    }, 
    { 
    entity: "context1", 
    value: "Inst3" 
    }, 
    { 
    entity: "context2", 
    value: "Inst4" 
    } 

참고 :

instanceIndividual 더 많은 것을 할 수 있습니다 contextListBufferForSubGroup에있는 요소보다 이 경우 instanceIndividual의 마지막 추가 요소를 무시해야합니다.

답변

1

튜플 목록에 두 개의 목록을 압축 한 다음 그 위에 매핑 할 수 있습니다. 예 : Context이 함수처럼 호출 할 수있는 경우

subgroupMetricIndividual.instances.foreach { instanceIndividual => 
    val MetricContextListBuffer = contextListBufferForSubGroup.zip(instanceIndividual).map { 
    case (contextIndividual, instanceIndividualIndex) => Context(
     entity = contextIndividual, 
     value = instanceIndividualIndex.toString 
    ) 
    } 
} 

Context(contextIndividual, instanceIndividualIndex.toString)는이도 짧은을 작성할 수 있습니다. 정확한 데이터 유형을 모른 채

subgroupMetricIndividual.instances.foreach { instanceIndividual => 
    val MetricContextListBuffer = contextListBufferForSubGroup 
    .zip(instanceIndividual.map(_.toString)).map(Context.tupled) 
} 
1

, 나는, 당신이 원하는 아마 가까운 및지도를 사용하여 약간 더 많은 기능 무언가 불변의 컬렉션을 조롱하고있어

case class Context(entity:String, value:String) 

val contextListBufferForSubGroup = List("context1","context2") 
val subgroupMetricIndividualInstances = List(List("Inst1","Inst2",1),List("Inst3","Inst4",2)) 

val result: List[Context] = subgroupMetricIndividualInstances.map { instanceIndividual => 
contextListBufferForSubGroup.zip(instanceIndividual) map { case v: (String, String) => 
    Context(
     entity = v._1, 
     value = v._2 
    ) 
    } 
}.flatten 
관련 문제