从 Scala 中的 ArrayBuffer[String] 元素的排列创建字符串
Creating a string from the permutations of an ArrayBuffer[String] elements in Scala
我有
val a: String = "E"
val y: ArrayBuffer[String] = new ArrayBuffer("I", "G", "S")
我正在尝试制作一个字符串,这样:
"(E <=> (I | G | S)) & (~I | ~G) & (~I | ~S) & (~G | ~S)"
目前,对于字符串的第一部分(第一个子句)(E <=> (I | G | S))
,我有这个功能:
s"($a <=> (${y.mkString(" | ")}))" // & (~${y.mkString(" | ~")})"
对于第二部分,y
中元素的排列在哪里,即对于 (~I | ~G) & (~I | ~S) & (~G | ~S)
,我如何改进(修复)评论中的部分以创建它?
我正在尝试使用 y.permutations
创建另一个字符串,然后与这个字符串连接,但它可以是 "generated" 这里 - 以某种方式在同一个字符串中吗?
谢谢。
从你的例子看来,你需要的是组合,而不是排列。
因此,要为 y
中的每对元素取一个术语,您可以使用 combinations
方法找到长度为 2 的所有组合。然后你可以用必要的格式将每一对包裹在括号中,最后用 mkString
:
构建整个第二部分
y.combinations(2).map { case Seq(a, b) => s"(~$a | ~$b)" }.mkString(" & ")
您可以将此表达式集成到字符串插值中:
s"($a <=> (${y.mkString(" | ")})) & ${
y.combinations(2).map { case Seq(a, b) => s"(~$a | ~$b)" }.mkString(" & ")}"
我有
val a: String = "E"
val y: ArrayBuffer[String] = new ArrayBuffer("I", "G", "S")
我正在尝试制作一个字符串,这样:
"(E <=> (I | G | S)) & (~I | ~G) & (~I | ~S) & (~G | ~S)"
目前,对于字符串的第一部分(第一个子句)(E <=> (I | G | S))
,我有这个功能:
s"($a <=> (${y.mkString(" | ")}))" // & (~${y.mkString(" | ~")})"
对于第二部分,y
中元素的排列在哪里,即对于 (~I | ~G) & (~I | ~S) & (~G | ~S)
,我如何改进(修复)评论中的部分以创建它?
我正在尝试使用 y.permutations
创建另一个字符串,然后与这个字符串连接,但它可以是 "generated" 这里 - 以某种方式在同一个字符串中吗?
谢谢。
从你的例子看来,你需要的是组合,而不是排列。
因此,要为 y
中的每对元素取一个术语,您可以使用 combinations
方法找到长度为 2 的所有组合。然后你可以用必要的格式将每一对包裹在括号中,最后用 mkString
:
y.combinations(2).map { case Seq(a, b) => s"(~$a | ~$b)" }.mkString(" & ")
您可以将此表达式集成到字符串插值中:
s"($a <=> (${y.mkString(" | ")})) & ${
y.combinations(2).map { case Seq(a, b) => s"(~$a | ~$b)" }.mkString(" & ")}"