Сравнение вложенного списка списка со списком

Я пытаюсь сравнить список значений списка с другим списком и вернуть его, если он совпадает. Я смотрю его в 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? Любые предложения

какая структура данных? Вы упомянули значения списка. это должна быть карта? Структура данных, как вы описали, не имеет особого смысла.

Dionysis Nt. 29.05.2019 09:55

Каков ожидаемый результат от вашего ввода? Пожалуйста, добавьте это к вашему вопросу.

James Whiteley 29.05.2019 10:18
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
93
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Из начального набора требований, который вы предоставили, следующее решение решит вашу проблему.

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.

Ashwin Kumar Padhy 29.05.2019 10:31

@AshwinKumarPadhy решение было изменено.

Chaitanya Waikar 29.05.2019 11:02

Спасибо Чайтанья. Это работает. Будет ли это то же самое, если ввод будет строкой. Например, val l1 = Array("o1,12,73,77,65,[1,2,3]#o2,12,73,77,65,[1,2,3]#o2,12,7‌​3,77,65,[1,2,3] ]") какие изменения требуются

Ashwin Kumar Padhy 29.05.2019 12:01

Решение будет меняться для разных типов входных данных. Если это решение отвечает на ваш вопрос, вы можете принять его.

Chaitanya Waikar 29.05.2019 12:04

@AshwinKumarPadhy, вы можете опубликовать другой вопрос для этого

Chaitanya Waikar 29.05.2019 12:09

Вам нужно сгладить 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

Другие вопросы по теме