Фильтровать массив, используя другой массив - PullRequest
0 голосов
/ 24 апреля 2020
   val value = Array["id","sd","cd"]  -- List of columns 
   val cols_list = Array["cd","id","tm","no","in","ts","nm"] -  -- List of columns 

я хочу список со столбцами, которых нет в cols_list.

код, который я попробовал, как показано ниже:

     val newcol = for (x <- cols_list if x.toString.toUpperCase() not in value )

это выдает ошибку, поскольку значение not не является членом String. Есть ли способ, которым мы можем достичь? Пожалуйста, предложите.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

simple это метод filterNot (кроме diff), который возвращает все элементы из списка, для которого ваша функция возвращает false.

val value = Array("id","sd","cd")  // List of columns
     val cols_list = Array("cd","id","tm","no","in","ts","nm")

     val finallist = cols_list.filterNot(value.contains(_)) //cols_list.par.filterNot also you can use
     println(finallist.mkString(" "))
 }

Результат: tm no in ts nm


Как это работает ...

Фильтр создает коллекцию с теми элементами, которые не удовлетворяют предикату p и отбрасывают остальные. Это уровень коллекции и будет работать для всех API коллекций в scala подпись:

  def filterNot(p: (A) => Boolean): Collection[A]

enter image description here

0 голосов
/ 24 апреля 2020

используйте .diff, чтобы получить список столбцов, отсутствующих в cols_list

val value = Array("id","sd","cd")
val cols_list = Array("cd","id","tm","no","in","ts","nm")
value.diff(cols_list)
//Array[String] = Array(sd)

//case insensitive 
value.map(x => x.toUpperCase).diff(cols_list.map(x => x.toUpperCase)).map(x => x.toLowerCase)
//Array[String] = Array(sd)

UPDATE:

cols_list.diff(value)
//Array[String] = Array(tm, no, in, ts, nm)

cols_list.map(x => x.toUpperCase).diff(value.map(x => x.toUpperCase)).map(x => x.toLowerCase)
//Array[String] = Array(tm, no, in, ts, nm)

cols_list.map(x => x.toUpperCase).diff(value.map(x => x.toUpperCase)).map(x => "\"a." + x.toLowerCase + "\"").mkString(",")
//String = "a.tm","a.no","a.in","a.ts","a.nm"
...