Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将值从映射映射到Scala中的字符串_Scala_Data Structures - Fatal编程技术网

将值从映射映射到Scala中的字符串

将值从映射映射到Scala中的字符串,scala,data-structures,Scala,Data Structures,我有一张这样的地图: val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7) val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)" 还有这样一个公式: val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7) val r:

我有一张这样的地图:

val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7)
val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)"
还有这样一个公式:

val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7)
val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)"
如何使用映射映射Lit1、Lit2和Lit3的值,以便将r字符串作为

val r: String = "(8 & (11 | 7) & ~11)"

感谢您的帮助。

您可以使用正则表达式查找文本,并将其替换为从映射中检索到的值:

val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7)
val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)"
val s: String = """Lit\d+""".r.replaceAllIn(r, m => map(m.group(0)).toString)


println(s) // (8 & (11 | 7) & ~11)
如果查找映射中可能不存在一个或多个文本,则需要使用getOrElse:


可以使用正则表达式查找文本,并将其替换为从映射中检索的值:

val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7)
val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)"
val s: String = """Lit\d+""".r.replaceAllIn(r, m => map(m.group(0)).toString)


println(s) // (8 & (11 | 7) & ~11)
如果查找映射中可能不存在一个或多个文本,则需要使用getOrElse:


我想这就是你想要的

val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7)
val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)"

map.foldLeft(r){case (s, (k,v)) => s.replaceAll(k,v.toString)}
// res0: String = (8 & (11 | 7) & ~11)

折叠映射键->值对,修改每一步的字符串。

我想这就是你想要的

val map: Map[String, Int] = Map("Lit1" -> 8, "Lit2" -> 11, "Lit3" -> 7)
val r: String = "(Lit1 & (Lit2 | Lit3) & ~Lit2)"

map.foldLeft(r){case (s, (k,v)) => s.replaceAll(k,v.toString)}
// res0: String = (8 & (11 | 7) & ~11)


折叠映射键->值对,修改每个步骤上的字符串。

您必须解析字符串r,以便在映射中查找值。然后用值替换lookedup键。您必须解析字符串r,以便在映射中查找值。然后将lookedup键替换为values.cleer,但如果字符串r包含映射中未找到的Lit引用,则会抛出。True。“我得做点什么才能解决这个问题。”罗比·科内利森,谢谢你。我试图为LitX是一个具体名称的情况找到通用的.r表达式,例如,算法等。我已经遇到了@jwvh提到的问题。@user4712458是的,我更新了我的答案以涵盖该情况。@Robby Cornelissen,仅针对那些可能需要Lits名称通用案例的情况,比如我,.r表达式是:val s:String=[A-Za-z]+.r.replaceAllInr,m=>map.getOrElsem.group0,m.group0.toString杠杆,但如果字符串r包含映射中未找到的Lit引用,则会抛出。True。“我得做点什么才能解决这个问题。”罗比·科内利森,谢谢你。我试图为LitX是一个具体名称的情况找到通用的.r表达式,例如,算法等。我已经遇到了@jwvh提到的问题。@user4712458是的,我更新了我的答案以涵盖该情况。@Robby Cornelissen,仅针对那些可能需要Lits名称通用案例的情况,比如我,.r表达式是:val s:String=[A-Za-z]+.r.replaceAllInr,m=>map.getOrElsem.group0,m.group0.toString+1。但是,如果查找映射的大小增加,可能会变得昂贵。@jwvh,是的。它真的很实用。我想我必须接受它,并确切地理解它是如何运作的,以及为什么运作的。万分感谢!如果有Lit1和Lit11,则中断。@原型保罗,我有具体的名称,而不是Lit1和Lit2,例如,我有图形、算法等。@user4712458问题是一个名称是否是另一个名称的子字符串,而不仅仅是它是否是LitNN。但是jwh的改变给出了+1。但是,如果查找映射的大小增加,可能会变得昂贵。@jwvh,是的。它真的很实用。我想我必须接受它,并确切地理解它是如何运作的,以及为什么运作的。万分感谢!如果有Lit1和Lit11,则中断。@原型保罗,我有具体的名称,而不是Lit1和Lit2,例如,我有图形、算法等。@user4712458问题是一个名称是否是另一个名称的子字符串,而不仅仅是它是否是LitNN。但是jwh的改变解决了这个问题