2013-11-09 3 views
0

Я пытаюсь найти элемент в списке списков; в частности, если конкретный город можно найти в стране.Поиск элемента в списке списка, в Scala

У меня есть штаты: 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 ownedToCountry (страна: List [List [City]], p: City): Boolean' – ryan

ответ

0

Вы должны использовать contains вместо foreach:

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

Идея такова: city принадлежит к коллекции countries если коллекция countriescontainscountry, что contains это city.

В качестве альтернативы вы можете получить все города из коллекции стран, а затем проверить, если результат содержит этот 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 
    } 
} 
Смежные вопросы