2016-06-28 4 views
0

나는 할 수있는 한 내 질문을 설명하려고 노력할 것입니다.스칼라; 목록을 반복하고 각 반복 내에서 다른 목록을 반복하는 방법

그래서 배달 내 재고 목록이 있습니다. 이 목록을 반복하고 재고 목록 및 제품 목록의 제품 ID가 일치하고 제품 수량을 늘릴 때까지 제품 목록을 반복하여 일치하는 제품 ID를 찾을 수 있기를 바랍니다.

는 그래서 StockItem 클래스는 다음과 같습니다

case class StockItem(val spiId : Int, val pId :Int, val sdId :Int, val quan : Int) 

그리고 내 Product 클래스는 다음과 같습니다

case class Product(val prodId : Int, val name : String, val desc : String, val price : Double, var quantity : Int, val location : String) 

나는 특정 SPID를 가지고 모든 StockItems을 찾을 수있는 방법이있는 StockItem 목록을 반환합니다.

def findAllItemsInSP(sdId: Int): List[StockPurchaseItem] = stockPurchaseItems2.filter(_.sdId == sdId) 

다른 방법으로는 t를 반복 처리하지 못했습니다. 각 제품의 수량을 늘리십시오.

def incrementStock(spID: Int){ 
     val items = StockPurchaseItem.findAllItemsInSP(spID) 

    for (i <- items){ 
     if(i.pId == products.prodId) 
    } 
    } 

제품은 일련의 제품 오브젝트입니다. 분명히 products.prodId가 작동하지 않습니다. 전체 세트가 아니라 제품 세트의 한 요소를 참조해야합니다. 제품 세트에서 일치하는 제품 ID를 찾는 방법을 모르겠습니다. 어떤 도움이 주어진다면, 나는 매우 감사 할 것입니다.

참고 : sdId와 spID는 같은 것을 말합니다.

많은 감사 재키 내가 양에 추가 한 다음 해당 제품 ID와 기존 속성에 새로운 제품을 만들고으로하고 싶었던 일을 관리해야 좋아

답변

0
def incrementStock(spID: Int){ 
    val items = StockPurchaseItem.findAllItemsInSP(spID) 

for (i <- items) { 
    for (p <- products) { 
    if(i.pId == p.prodId) 
     products += p 
} 
+0

답장을 보내 주셔서 감사합니다.수량을 1로 업데이트하고 싶지는 않습니다. 기존 재고 수량을 새 재고 납품에서 해당 제품에 대해 수령 한 수량과 합산하여 새 수량을 얻고 싶습니다. –

+0

제품에 추가하고 싶습니까? 나는 나의 반응을 편집했다. – Simon

-1

.

def incrementStock(spID: Int){ 
     val items = StockPurchaseItem.findAllItemsInSP(spID) 

    for (i <- items){ 
     var currentProd: Product = Product(Product.findProduct(i.pId).get.prodId, Product.findProduct(i.pId).get.name, Product.findProduct(i.pId).get.desc, Product.findProduct(i.pId).get.price, Product.findProduct(i.pId).get.quantity, Product.findProduct(i.pId).get.location) 
     currentProd.quantity += i.quan 

     products -= (findProduct(i.pId).get) 
     products = products + currentProd 
    } 

    printProductInfo() 
    } 
2

1 - 당신이 그 val 레이블을 필요가 없습니다 있도록 case class에 대한 모든 매개 변수가 자동으로 클래스 값입니다.

두 번째 - 특정 spId가있는 모든 StockItem을 찾을 수있는 방법이 있지만 코드는 _.sdId == sdId으로 필터링됩니다. spider? SD? 조금 혼란스러워.

세 번째 - "products은 (는) 프로젝트 개체 집합입니다." Product 개체를 의미합니까? "프로젝트"코드가 보이지 않습니다.

따라서 할 수있는 한 가지는 itemsMap[Int,Int]으로 만드는 것으로, pId을 수량으로 변환하지만 기본값은 0입니다.

val items = StockPurchaseItem.findAllItemsInSP(spID).map(x => (x.spId, x.quantity)).toMap.withDefaultValue(0) 

이제 items(spId)에 의해 모든 양을 증가, products을 걸어 갈 수 있습니다.

products.foreach(p => p.quantity += items(p.spId)) // or something like that 
+0

죄송합니다. 오타가 생겨서 죄송합니다. 지금 바로 수정하겠습니다. –

2

아래의 유사한 방법으로 '이해할 수 있습니다'Docs으로 할 수 있습니다.

+0

이것은 아마도 가장 간단하고 효율적인 방법 일 것입니다. – patrykos91

+0

내재와 관련된 스칼라 스타일 가이드 확인 : http://docs.scala-lang.org/style/control-structures.html#comprehensions 세미콜론을 피하십시오. –

+0

죄송합니다. 코드 편집기를 사용할 수 없었기 때문에 저는 게으르다가 안전하고 싶었습니다. 수정되었습니다. 감사합니다. –

관련 문제