如何在scala中的另一个数组中使用一个数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?

Posted

技术标签:

【中文标题】如何在scala中的另一个数组中使用一个数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?【英文标题】:How to use an array inside another array in scala in order to use each element from one array to append to corresponding element from other array? 【发布时间】:2021-07-04 14:13:23 【问题描述】:

第一个数组: var keyColumns = "A,B".split(",")

第二个数组: var colValues = DataFrameTest.select("Y","Z").collect.map(row => row.toString) colValues: Array[String]= Array([1,2],[3,4],[5,6])

我想要这样的结果: 数组([A=1,B=2],[A=3,B=4],[A=5,B=6])

这样以后我就可以遍历这个数组并创建我的 where 子句 在哪里 (A=1 AND B=2) OR (A=3 AND B=4) OR (A=5 AND B=6)

【问题讨论】:

【参考方案1】:

首先,不要将结构化数据转换为字符串。在收集后执行.map(_.toSeq),而不是toString

然后,这样的事情应该可以工作:

   colValues
     .map  _ zip keyColumns  
     .map  _.map  case (v,k) => s"$k=$v"  
     .map  _.mkString("(", " AND ", ")") 
     .mkString(" OR ")

您可能会发现在 REPL 中逐步运行此程序并查看每一行的作用很有帮助。

【讨论】:

感谢您的回复和代码sn-p。它有帮助,但 .join 不起作用,'value join 不是 Seq [String] 的成员' 我尝试使用 map 代替 join .map _.map e => e.split(",") .mkString(" AND ") 它不会抛出任何错误,但它什么也没做。当在类似的字符串上显式尝试时,它可以工作,但不能在链式转换中。 呃,对不起...mksString,不是join ...我总是在不同的语言之间混淆:)我会更新答案。【参考方案2】:

你可以使用正则表达式,比如:

scala> val keyColumns = "A,B".split(",")
keyColumns: Array[String] = Array(A, B)

scala> val colValues = "[1,2] [3,4] [5,6]".split(" ")
colValues: Array[String] = Array([1,2], [3,4], [5,6])

scala> val pattern = """^\[(.1),(.1)\]$""".r //here, (.1) determines a regex group of exactly 1 any char
pattern: scala.util.matching.Regex = ^\[(.1),(.1)\]$

scala> colValues.map  e => pattern.findFirstMatchIn(e).map  m => s"($keyColumns(0)=$m.group(1) AND $keyColumns(1)=$m.group(2))" .getOrElse(e) .mkString(" OR ")
res0: String = (A=1 AND B=2) OR (A=3 AND B=4) OR (A=5 AND B=6)

【讨论】:

以上是关于如何在scala中的另一个数组中使用一个数组,以便使用一个数组中的每个元素附加到另一个数组中的相应元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据存储在动态二维数组中,该数组在 C++ 中的另一个结构中也使用的结构中声明

如何将一个对象插入到mongo数组中的另一个对象中

如果一个数组包含使用 BigQuery 的另一个数组的所有值,我如何过滤行?

在java中,如何在int数组中为该数组中的另一个值添加值?

如何检查数组字段是不是包含唯一值或 MongoDB 中的另一个数组?

如何从 Java 中的另一个数组创建子数组?