Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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_Dictionary_Iterator_Tuples_Immutability - Fatal编程技术网

元组scala的不可变迭代器映射

元组scala的不可变迭代器映射,scala,dictionary,iterator,tuples,immutability,Scala,Dictionary,Iterator,Tuples,Immutability,我在scala中有一个元组映射,我只想从中获得选中的键、值对 我试过了 val m1 = {"a":{"0":"R","1":null,"2":null,"3":12.25.0,"4":null} ,"b":{"0":"R","1":null,"2":null,"3":34.75,"4":null} ,"c":{"0":"R","1":null,"2":null,"3":56.25,"4":null} ,"d":{"0":"R","1":nu

我在scala中有一个元组映射,我只想从中获得选中的键、值对

我试过了

val m1 = {"a":{"0":"R","1":null,"2":null,"3":12.25.0,"4":null}
         ,"b":{"0":"R","1":null,"2":null,"3":34.75,"4":null}
         ,"c":{"0":"R","1":null,"2":null,"3":56.25,"4":null}
         ,"d":{"0":"R","1":null,"2":null,"3":45.65,"4":null}
         }
然后尝试迭代。但我无法处理这个复杂的表达式

因为我只需要a和b,结果会是

a-> 12.25

d-> 45.65

如何在scala中迭代它

数据的Scala等价物如下所示:

val m1: List[(String, List[(String, Any)])] =
  List("a" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 12.25, "4" -> null),
       "b" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 34.75, "4" -> null),
       "c" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 56.25, "4" -> null),
       "d" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 45.65, "4" -> null))
val keys = List("a", "d")
val field = 3

m1.collect{ case (k, v) if keys.contains(k) => (k, v(field)._2) }
获得此格式的数据后,可以按如下方式提取所需的数据:

val m1: List[(String, List[(String, Any)])] =
  List("a" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 12.25, "4" -> null),
       "b" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 34.75, "4" -> null),
       "c" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 56.25, "4" -> null),
       "d" -> List("0" -> "R", "1" -> null, "2" -> null, "3" -> 45.65, "4" -> null))
val keys = List("a", "d")
val field = 3

m1.collect{ case (k, v) if keys.contains(k) => (k, v(field)._2) }
如果数据的顺序无关紧要,那么您可以使用
Map
而不是
List
,代码会稍微干净一些:

val field = "3"

m1.collect{ case (k, v) if keys.contains(k) => (k, v(field)) }

这还允许您删除
null
值,并避免使用
Any

m1的类型是什么?现在它不在Scala语法中,所以代码表示有点无意义。这是元组还是JSON?这是元组。实际上,输入在csv文件中。只是从中复制了一个示例输入行。代码将从文件中读取它,并将所选的键、值作为输出。@jwvh将其转换为元组映射。val m1=Map(“…”)然后请在代码中指出。Scala元组是括号内逗号分隔的值:
('c',5)
映射的键/值对通常用箭头表示,
'd'->12
,但您也可以使用元组表示法,
('d',12)