Я пытаюсь сравнить список значений списка с другим списком и вернуть его, если он совпадает. Я смотрю его в scala, однако я новичок в scala, и это трудно сделать, если какие-либо предложения, пожалуйста, передайте
val l1 = List(List(1,12.34,76.456,12,List(1,2,3)),List(2,12.43,76.256,12,List(11,12,13)))
val l2 = List(1,2,3,12)
поэтому здесь пытаются сравнить l1([1,2,3])
с l2 [1,2,3,12]
и l1 [11,12,13]
с l2 [1,2,3,12]
и вернуть, если не совпадают ни один элемент от l1 до l2.
здесь мы ищем из l1 любое значение, совпадающее с l2, затем 0, иначе 1
Сложно, но возможно ли это в scala? Любые предложения
Каков ожидаемый результат от вашего ввода? Пожалуйста, добавьте это к вашему вопросу.
Из начального набора требований, который вы предоставили, следующее решение решит вашу проблему.
val l1 = List(List(1,12.34,76.456,12,List(1,2,3)),List(2,12.43,76.256,12,List(11,12,13)))
val l2 = List(11,12,13)
l1.flatten.filter(_.isInstanceOf[List[Int]]).map(x =>
if (x == l2) 0 else 1)
Это дает вам результат, соответствует ли список l2 внутреннему списку l1 или нет.
res1: List[Int] = List(1, 0)
Он должен дать [0,1], так как l1 содержит 2 основных списка. Второй соответствует 1, а остальные 0.
@AshwinKumarPadhy решение было изменено.
Спасибо Чайтанья. Это работает. Будет ли это то же самое, если ввод будет строкой. Например, val l1 = Array("o1,12,73,77,65,[1,2,3]#o2,12,73,77,65,[1,2,3]#o2,12,73,77,65,[1,2,3] ]") какие изменения требуются
Решение будет меняться для разных типов входных данных. Если это решение отвечает на ваш вопрос, вы можете принять его.
@AshwinKumarPadhy, вы можете опубликовать другой вопрос для этого
Вам нужно сгладить l1
. чтобы сделать его универсальным (потому что, как я понимаю, l1
может быть списком списка списка ..), вы можете создать общий метод, который сглаживает его:
def flatten[T](l: List[T]): List[T] = l match {
case Nil => Nil
case (x: List[T]) :: tail => flatten(x) ::: flatten(tail)
case x :: tail => x :: flatten(tail)
}
Затем вы можете получить результат:
(l2.map(flatten(l1).contains)).map(_.compare(false)) // List(1,1,1,1)
Вот код для запуска и отладки — https://scalafiddle.io/sf/3SStZZX/1
какая структура данных? Вы упомянули значения списка. это должна быть карта? Структура данных, как вы описали, не имеет особого смысла.