#list #scala #dictionary #collections #functional-programming
Вопрос:
val filesMap = [/dir/one -> {text1.txt, text2.txt, command.txt}, /dir/two -> {text1.txt, text2.txt, command.txt}, /dir/three -> {text1.txt, text2.txt}}
val allFiles = filesMap().toList
Каталог, в котором command.txt
находится файл, должен быть проанализирован, остальные из них будут проигнорированы. Все вышесказанное /dir/three
следует игнорировать. Затем мне нужно прочитать command.txt
, который содержит такие команды, как следующая Delete: 2
вставка двух самых старых файлов в список всех файлов. У меня уже есть метод для чтения command.txt
файла и извлечения всех команд, и это значение для сопоставления commandMap
. Например commandMap
, выглядит следующим образом.
commandMap = {Delete -> 2, Copy -> 2, Cut -> 2}
// method that extract commands from commands.txt to the map
def readCommandFile(pathToCommand: String): Map[String, Int] ={
// som logic to extract list of commands from the text file
}
Комментарии:
1. @Jwvh пожалуйста, дайте мне знать, если у вас есть еще какие-либо вопросы?
Ответ №1:
def isCommand: FileStatus => Boolean = f => /* add ur allCommandsInDatFile.contains(numberOfFiles) */
def getIndex: FileStatus => Int = f => /* add ur Integer.parseInt(allCommandsInDatFile(numberOfFiles) */
fileMap.flatMap {
case (_, files) => files.find(isCommand) match {
case Some(file) =>
val index = getIndex(file)
files.takeRight(index)
case None => files
}
}
Решит ли это вашу проблему?
Я немного отредактировал.
Комментарии:
1. Как я могу добавить несколько параметров в, здесь содержится только состояние файла => F
2. Не могли бы вы подробнее рассказать о своем
allCommandsInDatFile.contains(numberOfFiles)
? С моей точки зрения, это просто для того, чтобы проверить,keep command
меньше ли 0 или больше длины списка. вы можете легко добавить эту логику вgetIndex: FileStatus => Int
.3. Я сделал то же самое, что вы сказали, если(индекс != 0) файлов.takeRight(индекс) еще нет, но похоже, что логика фильтра не работает.