给定字符串列表代表Scala中映射的键,如何将List [String]转换为List [Map [String,String]]?

Loyola简介

我有一个清单references

val references: List[String]= List("S","R")

我也有variables

val variables: Map[String,List[String]]=("S"->("a","b"),"R"->("west","east"))

references 是变量映射的键列表。

我想构造一个函数,它需要:

def expandReplacements(references:List[String],variables:Map[String,List[String]]):List[Map(String,String)]

这个函数基本上应该创建返回以下组合

List(Map("S"->"a"),("R"->"west"),Map("S"->"a"),("R"->"east"),Map("S"->"b"),("R"->"west"),Map("S"->"b"),("R"->"east"))

我尝试这样做:

val variables: Map[String,List[String]] = Map("S" -> List("a", "b"), "R" -> List("east", "central"))
val references: List[String] = List("S","R")

def expandReplacements(references: List[String]): List[Map[String, String]] =
  references match {
    case ref :: refs =>
      val variableValues =
        variables(ref)
      val x = variableValues.flatMap { variableValue =>
        val remaining = expandReplacements(refs)
        remaining.map(rem => rem + (ref -> variableValue))
      }
      x

    case Nil => List.empty
  }
托玛谢塔

如果引用超过2个,则可以执行以下操作:

def expandReplacements(references: List[String], variables :Map[String,List[String]]): List[Map[String, String]] = {
  references match {
    case Nil => List(Map.empty[String, String])
    case x :: xs =>
      variables.get(x).fold {
        expandReplacements(xs, variables)
      } { variableList =>
        for {
          variable <- variableList.map(x -> _)
          otherReplacements <- expandReplacements(xs, variables)
        } yield otherReplacements + variable
      }
  }
}

代码在Scastie运行

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将List <Map <String,List <String >>>转换为String [] []

Java将List <String>转换为Map <String,String>

将 List<List<TextValue>> 转换为 List<Map<String, String>>

将Map <String,Object>转换为Map <String,List <Object >>

如何将List <Map <String,Object >>转换为List <Map <String,String >>

如何将具有类似键的List <Map <String,String >>转换为Map <String,List <String >>?

Groovy 2 List 转换为 Map(String,List<String>)

将“ Map <String,List <String >>”强制转换为“ Map <String,List <String >>”

Scala - 将 List[((String, String), Double)] 转换为 List[String,Map[String,Double]]

Java-8流:将List <{String,List <String>}>转换为Map <String,List <String >>

在Kotlin中将Map <String,List <String >>转换为List <Map <String,String >>

Kotlin FP:将List <String>转换为Map <String,Int>

将List <Map <String,Object >>转换为String [] []

将List <String>转换为Map <String,Integer>

如何将 List<Map<String,Object>> 转换为 Map<String, String>?

使用Terraform将列表(map(list(map(string()))))转换为map(list(map(string))))

Java8:通过联接值将Map <String,List <String >>转换为Map <String,String>

颤振类型转换为 List<Map<String, String>>

Java:如何将List <?>转换为Map <String,?>

如何将List <Map <?,?>>转换为List <Map <String,String >>?

如何在dart中将List <List <Map <String <String,String >>>转换为List <List <CustomObject >>

使用 Java 8 中的列表值将 List<String> 转换为 Map<String, String>

使用Java 8流,如何将Map <String,Map <String,List <Person >>>转换为Map <Integer,Map <String,Integer >>?

使用Java 8流如何将Map <String,List <Something >>转换为Map <String,Integer>?

如何将List <NameValuePair>转换为List <Map.Entry <String,String >>?

我想将 MultivaluedMap<String, String> 标头转换为 Map<String,List<String>>

Java-8流:将Map <String,List <List <DataType >>>转换为Map <String,List <DataType >>

将Json转换为Map [String,String]

将Map <String,String>转换为POJO