Я новичок в SO, но потратил дни на изучение вопросов.Ближайший связанный с этим вопрос, который я нашел, это Как сравнить каждое слово строки в файле с элементом списка в scala? , но это относится к 2014 году, так что теперь могут быть разные решения.
Также в приведенном выше сообщении лучший ответ использует изменяемую структуру данных, которую я стараюсь избегать.Последний ответ Димы выглядел более функциональным, но не сработал: (
Я пытаюсь создать аналогичную программу в SCALA, за исключением того, что вывод должен содержать общее количество ключевых слов и все ключевые слова должны быть выведены, дажеесли совпадений не найдено, то счетчик будет равен нулю.
Ключевые слова для проверки жестко закодированы в список, однако я также хочу добавить опцию второго предоставленного пользователем аргумента, который содержит ключевые слова.Пока я пришел к следующему, но получил отстой:
object FileAnalyser extends App {
val hardcodedkeywords = List("foo", "bar", "hello")
if (args.length > 1) {
val keywords = args(1).toList
try {
val rdd = Source.fromFile(args(0)).getLines.toList.zipWithIndex.flatMap {
case(line, index) => line.split("\\W+").map { (_, index+1) }
} //.filter(keywords.contains(_)).groupBy { _._1 }.mapValues(_._2)
} catch {
case ioe: IOException => println(ioe)
case fnf: FileNotFoundException => println(fnf)
case _: Throwable => println("Uknown error occured")
}
} else
try {
val rdd = Source.fromFile(args(0)).getLines.toList.zipWithIndex.flatMap {
case(line, index) => line.split("\\W+").map { (_, index+1) }
} //filter(hardcodedkeywords.contains(_))
//.groupBy { _._1 }.mapValues(_._2)
} catch {
case ioe: IOException => println(ioe)
case fnf: FileNotFoundException => println(fnf)
case _: Throwable => println("Uknown error occured")
}
}
До сих пор мне удавалось использовать args (0), содержащий файл для чтения, для чтения и сопоставленный со списком, содержащим строку втакже строка + индекс + 1 (так как номера строк начинаются с 1, но индекс начинается с 0) Программа должна быть настолько функциональной, насколько это возможно, чтобы меньше изменяемых и изменяемых состояний и больше функций высшего порядка и рекурсий списка.
Спасибо Примервывод будет:
//alphabetical //No duplicates
//order //Increasing in no.
keyword lines count
bar [1,2..] 6
foo [3,5] 2
hello [] 0