частичное совпадение строки scala

У меня есть вопрос о частичном совпадении списка строк со списком строк (я думаю, они пересекаются).

List1:List = [a,b,c,d,e,f]
List2:Iterable[String] = [a b,e f,g h,x y]

Я хочу взять любой элемент или комбинацию элементов в List1, которые также находятся в List2, и заменить их элементом в List2, например, [a,b] находятся в List1, List 2 содержит элемент [a b], в в этом случае [a,b] в List1 будут заменены на [a b]. Результат для списка 1 должен быть:

List1result = [a b,c,d,e f] 

Я пробовал пересечение, которое возвращало [a b, e f]


person GameOfThrows    schedule 09.04.2015    source источник
comment
Я хочу заменить любой элемент чем? -- любой элемент в List1, который также находится в List2, но 'c' и 'd' не находятся в List2 ?   -  person Marth    schedule 09.04.2015
comment
извините, я хотел заменить элементы в списке 1, которые имеют ту же строку, что и в списке 2. Я изменил вопрос   -  person GameOfThrows    schedule 09.04.2015


Ответы (2)


Хорошо, я отредактировал свой ответ после комментария ниже, думаю, теперь я понял вопрос.

возьмите каждый элемент второго списка, преобразуйте его в список элементов и используйте containsSlice для фильтрации значения.

containsSlice вернет true, если все элементы среза присутствуют в первом списке.

val lst1 = List("a","b","c","d","e","f")
val lst2 = List("a b","e f","g h","x y")

lst2.filter{ pair =>
  val xss = pair.split(" ")
  lst1.containsSlice(xss)
}
person Makis Arvanitis    schedule 09.04.2015
comment
list2 не имеет a,b. У него есть б. OP хочет заменить a, b в list1 на b - person mohit; 09.04.2015

Вы можете попробовать что-то вроде этого:

  val l1 = List("a", "b", "c", "d", "e", "f")

  val l2 = List("a b", "e f", "g h", "x y")

  l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))

 l2.foldLeft(List[String]()) { case (x, y) => if (l1.containsSlice(y.split(" "))) x :+ y else x} ++ 
l1.filterNot(x=>l2.flatten.filter(_ != ' ').contains(x.toCharArray.head))


l1: List[String] = List(a, b, c, d, e, f)
l2: List[String] = List(a b, e f, g h, x y)
res0: List[String] = List(a b, e f, c, d)
person curious    schedule 09.04.2015