2013-11-09 6 views
0

목록 목록에서 요소를 찾으려고합니다. 특히 특정 도시가 한 국가에서 발견 될 수 있다면.스칼라의 목록 목록에서 요소 찾기

상태 : List[State] 및 도시 : List[City] 즉, 국가는 List[List[City]]으로 표시됩니다.

이 코드를 작성했지만 문제가있는 것으로 보입니다.

case class city (
    name: String, 
    CodePostal: Double, 
    visit: Boolean 
) 


def belongToCountry(p: city): Boolean = 
    countries.flatten.foreach { 
    case p => return true 
    case _ => return false 
    } 

def belongToCountry(p: city): Boolean = 
    countries.foreach(s => s.city.contains(p)) 
+0

해야이 될 것입니다 '국가'대신 '국가'가 되겠습니까? – ryan

+0

나는이 함수의 시그니처가'def belongsToCountry (country : List [List [City]], p : City) : Boolean'이어야한다고 생각한다. – ryan

답변

0

당신은 foreach 대신 contains를 사용해야합니다 :

def belongToCountry(p: city): Boolean = 
    countries.exists(s => s.contains(p)) 

생각은 :이 코드 조각입니다 citycountries의 컬렉션에 속하는 countriescontainscountry의 수집이 containscity 경우.

은 다른 방법은 국가의 수집에서 모든 도시를 얻을 수 있고, 결과는이 city 포함되어 있는지 확인 :

def belongToCountry(p: city): Boolean = 
    countries.view.flatten.exists{_ == p} 
+0

이 오류가 발생했다 : 누락 된 매개 변수 유형 – DataT

+0

@DataT : 고정. 업데이트를 참조하십시오. – senia

0

for 식 조금 더 자세한 솔루션

def belongToCountry(city: city): Boolean = { 

    val checkIterator: Iterator[Boolean] = for { 
    country <- countries.toIterator 
    cityName <- country 
    if (city.name == cityName) 
    } yield true 

    checkIterator.hasNext match { 
    case true => checkIterator.next() 
    case false => false 
    } 
} 
관련 문제