最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Scala List .diff() Behavior: Why Does Subtracting a Bigger List from a Smaller List Return an Empty List? - Stack Overflow

programmeradmin3浏览0评论

I have two Scala lists with different columns, but when I compare them using .diff(), I get unexpected results.

val TempPmTableColumns: Seq[String] = List("COLLECTTIME", "DATE", "TIME", "HOUR", "DAY", "WEEK", "MONTH", "NODE", "NEUSERNAME", "SUSPECTFLAG", "CELLID", "NODE_PM", "CELLID_TYPE", "ASLDUR", "CHOVERS", "LBUSDUR", "LINHNO", "LOCINHDUR", "NMSURE", "NMSUTR", "NNAREC", "NORTRO", "NSIFSRE", "NSIFTR", "NSLALPRFL", "NSUERR", "REMINHDUR", "RINHNO", "SYS7IND", "UNAVAILDUR", "UNAVRBLDUR", "UNAVSLFDUR", "COLLINT", "FILE_REVISION", "JOBTIME")
    
val finalPmTableColumns: Seq[String]= List("COLLECTTIME", "CELLID", "NODE", "SUSPECTFLAG", "NEUSERNAME", "NETWORK", "CITY", "REGION", "PERIOD", "DATE", "TIME", "HOUR", "DAY", "WEEK", "MONTH", "NODE_PM", "CELLID_TYPE", "ASLDUR", "CHOVERS", "LBUSDUR", "LINHNO", "LOCINHDUR", "NMSURE", "NMSUTR", "NNAREC", "NORTRO", "NSIFSRE", "NSIFTR", "NSLALPRFL", "NSUERR", "REMINHDUR", "RINHNO", "SYS7IND", "UNAVAILDUR", "UNAVRBLDUR", "UNAVSLFDUR", "COLLINT", "FILE_REVISION", "JOBTIME", "NODE_VALUE")
    
println(TempPmTableColumns)
println(finalPmTableColumns)
    
var ColumnDifferenceleft = TempPmTableColumns.diff(finalPmTableColumns)
println(ColumnDifferenceleft)
    
var ColumnDifferenceRight = finalPmTableColumns.diff(TempPmTableColumns)
println(ColumnDifferenceRight)
Output:-
List(COLLECTTIME, DATE, TIME, HOUR, DAY, WEEK, MONTH, NODE, NEUSERNAME, SUSPECTFLAG, CELLID, NODE_PM, CELLID_TYPE, ASLDUR, CHOVERS, LBUSDUR, LINHNO, LOCINHDUR, NMSURE, NMSUTR, NNAREC, NORTRO, NSIFSRE, NSIFTR, NSLALPRFL, NSUERR, REMINHDUR, RINHNO, SYS7IND, UNAVAILDUR, UNAVRBLDUR, UNAVSLFDUR, COLLINT, FILE_REVISION, JOBTIME)

List(COLLECTTIME, CELLID, NODE, SUSPECTFLAG, NEUSERNAME, NETWORK, CITY, REGION, PERIOD, DATE, TIME, HOUR, DAY, WEEK, MONTH, NODE_PM, CELLID_TYPE, ASLDUR, CHOVERS, LBUSDUR, LINHNO, LOCINHDUR, NMSURE, NMSUTR, NNAREC, NORTRO, NSIFSRE, NSIFTR, NSLALPRFL, NSUERR, REMINHDUR, RINHNO, SYS7IND, UNAVAILDUR, UNAVRBLDUR, UNAVSLFDUR, COLLINT, FILE_REVISION, JOBTIME, NODE_VALUE)

List()

List(NETWORK, CITY, REGION, PERIOD, NODE_VALUE)

I have two Scala lists with different columns, but when I compare them using .diff(), I get unexpected results.

val TempPmTableColumns: Seq[String] = List("COLLECTTIME", "DATE", "TIME", "HOUR", "DAY", "WEEK", "MONTH", "NODE", "NEUSERNAME", "SUSPECTFLAG", "CELLID", "NODE_PM", "CELLID_TYPE", "ASLDUR", "CHOVERS", "LBUSDUR", "LINHNO", "LOCINHDUR", "NMSURE", "NMSUTR", "NNAREC", "NORTRO", "NSIFSRE", "NSIFTR", "NSLALPRFL", "NSUERR", "REMINHDUR", "RINHNO", "SYS7IND", "UNAVAILDUR", "UNAVRBLDUR", "UNAVSLFDUR", "COLLINT", "FILE_REVISION", "JOBTIME")
    
val finalPmTableColumns: Seq[String]= List("COLLECTTIME", "CELLID", "NODE", "SUSPECTFLAG", "NEUSERNAME", "NETWORK", "CITY", "REGION", "PERIOD", "DATE", "TIME", "HOUR", "DAY", "WEEK", "MONTH", "NODE_PM", "CELLID_TYPE", "ASLDUR", "CHOVERS", "LBUSDUR", "LINHNO", "LOCINHDUR", "NMSURE", "NMSUTR", "NNAREC", "NORTRO", "NSIFSRE", "NSIFTR", "NSLALPRFL", "NSUERR", "REMINHDUR", "RINHNO", "SYS7IND", "UNAVAILDUR", "UNAVRBLDUR", "UNAVSLFDUR", "COLLINT", "FILE_REVISION", "JOBTIME", "NODE_VALUE")
    
println(TempPmTableColumns)
println(finalPmTableColumns)
    
var ColumnDifferenceleft = TempPmTableColumns.diff(finalPmTableColumns)
println(ColumnDifferenceleft)
    
var ColumnDifferenceRight = finalPmTableColumns.diff(TempPmTableColumns)
println(ColumnDifferenceRight)
Output:-
List(COLLECTTIME, DATE, TIME, HOUR, DAY, WEEK, MONTH, NODE, NEUSERNAME, SUSPECTFLAG, CELLID, NODE_PM, CELLID_TYPE, ASLDUR, CHOVERS, LBUSDUR, LINHNO, LOCINHDUR, NMSURE, NMSUTR, NNAREC, NORTRO, NSIFSRE, NSIFTR, NSLALPRFL, NSUERR, REMINHDUR, RINHNO, SYS7IND, UNAVAILDUR, UNAVRBLDUR, UNAVSLFDUR, COLLINT, FILE_REVISION, JOBTIME)

List(COLLECTTIME, CELLID, NODE, SUSPECTFLAG, NEUSERNAME, NETWORK, CITY, REGION, PERIOD, DATE, TIME, HOUR, DAY, WEEK, MONTH, NODE_PM, CELLID_TYPE, ASLDUR, CHOVERS, LBUSDUR, LINHNO, LOCINHDUR, NMSURE, NMSUTR, NNAREC, NORTRO, NSIFSRE, NSIFTR, NSLALPRFL, NSUERR, REMINHDUR, RINHNO, SYS7IND, UNAVAILDUR, UNAVRBLDUR, UNAVSLFDUR, COLLINT, FILE_REVISION, JOBTIME, NODE_VALUE)

List()

List(NETWORK, CITY, REGION, PERIOD, NODE_VALUE)
Share Improve this question edited Apr 1 at 10:37 Finbar Good 1,4812 gold badges9 silver badges14 bronze badges asked Apr 1 at 10:12 Suhani BhatiaSuhani Bhatia 1051 silver badge6 bronze badges 2
  • What result do you expect? – talex Commented Apr 1 at 11:15
  • 1 Maybe rather than List, you want to use Set and then do (s1 union s2) diff (s1 intersect s2) – Luis Miguel Mejía Suárez Commented Apr 1 at 13:22
Add a comment  | 

1 Answer 1

Reset to default 1

finalPmTableColumns contains all items in TempPmTableColumns, plus the following: "NETWORK", "CITY", "REGION", "PERIOD", "NODE_VALUE".

listA.diff(listB) returns listA minus all items in listB. Items in listB that are not in listA are ignored. So if listB contains all items in listA, then listA.diff(listB) will return an empty list, regardless of whether listB has some other items. diff is not commutative.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论