Я пытаюсь найти список деревьев для данного состояния в файле, используя Scala.

Вот пример файла (разделенный табуляцией): -

Quercus acerifolia  mapleleaf oak   MN
Quercus _acutidens      CA
Quercus acutissima  sawtooth oak    AL,GA,LA,MD,MS,NC,PA,VA
Quercus agrifolia   California live oak CA
Quercus alba    white oak    AL,AR,CT,DC,DE,FL,GA,IA,IL,IN,KS,KY,LA
Quercus ajdfensis   Ajo Mountain scrub oak ,MN

Мой код: -

//declaring package
package HW10

//declaring object
object TreesStub {

//importing Source package for files import
  import scala.io.Source

  //assigning the file path to filename variable
  val fileName = "trees.tsv"

  //defining Main function
  def main(args: Array[String]): Unit = {

    //reading source file from a file which is tabe separated
    val treeList: List[String] = Source.fromFile(fileName).getLines.toList

    //calling searchTrees method for a given State
    searchTrees("MN", treeList)

    //searchTrees method logic for a given State and print it
    def searchTrees(state: String, trees: List[String]): Unit = {

      //defining mutable empty map collection as "states"
      var states = collection.mutable.Map[String, String]()

      //Searching the tree list for a given state and adding the map and //tree list to the states map collection

    trees.map(x => (x.split("\t", -1))).filter((_.length > 2)).map(x =>

        //using try catch block for handling match not found exception
        try {
        if (x(2).contains(state)) states += (state -> x(0))
      }
      catch {
        //exception if caught to None
        case e: Exception => println(s"None")
      })
      //printing map "states" values
      states.foreach(println)
    }
  }
}

Вывод, который я получаю как: - (MN,Quercus acerifolia)

Ожидаемый результат :-( statename, список деревьев)

(MN,Quercus acerifolia)
(MN,Quercus ajdfensis)   

Я могу напечатать только одно совпадение, не могу напечатать все совпадения. Не уверен, что не так в коде? Похоже, карта повторяется только один раз не для всех совпадений. Пожалуйста, дайте мне знать, как распечатать все матчи?

0
Issaq 24 Апр 2017 в 02:59

2 ответа

Лучший ответ

states - это карта, структура данных, которая отображает каждый ключ на одно значение . Таким образом, карта - это неправильная структура данных, которую нужно использовать, если вы хотите собрать несколько результатов для одного и того же ключа.

0
Joe Pallas 24 Апр 2017 в 04:09
Quercus acerifolia  mapleleaf oak   MN
Quercus _acutidens      CA
Quercus acutissima  sawtooth oak    AL,GA,LA,MD,MS,NC,PA,VA
Quercus agrifolia   California live oak CA
Quercus alba    white oak    AL,AR,CT,DC,DE,FL,GA,IA,IL,IN,KS,KY,LA
Quercus ajdfensis   Ajo Mountain scrub oak ,MN

Вы пытались искать что-то кроме MN? Ваша последняя строка - ,MN, что, вероятно, мешает вашему сравнению строк.

1
Charles 24 Апр 2017 в 00:22