如何在scala中计算元组中字符串的长度
给定一个元组列表,其中元组的第一个元素是整数,第二个元素是字符串如何在scala中计算元组中字符串的长度,scala,scala-collections,Scala,Scala Collections,给定一个元组列表,其中元组的第一个元素是整数,第二个元素是字符串 scala> val tuple2 : List[(Int,String)] = List((1,"apple"),(2,"ball"),(3,"cat"),(4,"doll"),(5,"eggs")) tuple2: List[(Int, String)] = List((1,apple), (2,ball), (3,cat), (4,doll), (5,eggs)) 我想打印相应字符串长度为4的数字 这可以在一行中完成
scala> val tuple2 : List[(Int,String)] = List((1,"apple"),(2,"ball"),(3,"cat"),(4,"doll"),(5,"eggs"))
tuple2: List[(Int, String)] = List((1,apple), (2,ball), (3,cat), (4,doll), (5,eggs))
我想打印相应字符串长度为4的数字
这可以在一行中完成吗?您需要
。收集,它是过滤器+映射
根据你的意见
scala> val input : List[(Int,String)] = List((1,"apple"),(2,"ball"),(3,"cat"),(4,"doll"),(5,"eggs"))
input: List[(Int, String)] = List((1,apple), (2,ball), (3,cat), (4,doll), (5,eggs))
过滤长度为4的
scala> input.collect { case(number, string) if string.length == 4 => number}
res2: List[Int] = List(2, 4, 5)
使用过滤器的替代解决方案
+映射
,
scala> input.filter { case(number, string) => string.length == 4 }
.map { case (number, string) => number}
res4: List[Int] = List(2, 4, 5)
您需要
.collect
这是filter+map
根据你的意见
scala> val input : List[(Int,String)] = List((1,"apple"),(2,"ball"),(3,"cat"),(4,"doll"),(5,"eggs"))
input: List[(Int, String)] = List((1,apple), (2,ball), (3,cat), (4,doll), (5,eggs))
过滤长度为4的
scala> input.collect { case(number, string) if string.length == 4 => number}
res2: List[Int] = List(2, 4, 5)
使用过滤器的替代解决方案
+映射
,
scala> input.filter { case(number, string) => string.length == 4 }
.map { case (number, string) => number}
res4: List[Int] = List(2, 4, 5)
您可以
筛选
并打印
,如下所示
tuple2.filter(_._2.length == 4).foreach(x => println(x._1))
您应该将输出设置为
2
4
5
您可以
筛选
并打印
,如下所示
tuple2.filter(_._2.length == 4).foreach(x => println(x._1))
您应该将输出设置为
2
4
5
使用a进行如下理解:
for ((i,s) <- tuple2 if s.size == 4) yield i
注意,我们对每个元组中的元素进行模式匹配和提取,并按字符串大小进行过滤。若要打印列表,请考虑例如“代码> Actual.Frach(PrrtLn)< /C> > < /P> < P>使用如下理解,
for ((i,s) <- tuple2 if s.size == 4) yield i
注意,我们对每个元组中的元素进行模式匹配和提取,并按字符串大小进行过滤。若要打印列表,请考虑例如“代码>实例化.PROACH(PROTLN)< /代码> .< /P> < P>我喜欢@ PrayAgUd回答,使用<强>收藏< /强>。但是foldLeft是Scala中我最喜欢的函数之一!您可以使用foldLeft:
scala> val input : List[(Int,String)] = List((1,"apple"),(2,"ball"),(3,"cat"),(4,"doll"),(5,"eggs"))
input: List[(Int, String)] = List((1,apple), (2,ball), (3,cat), (4,doll), (5,eggs))
scala> input.foldLeft(List.empty[Int]){case (acc, (n,str)) => if(str.length ==4) acc :+ n else acc}
res3: List[Int] = List(2, 4, 5)
我喜欢@prayagupd回答使用收集。但是foldLeft是Scala中我最喜欢的函数之一!您可以使用foldLeft:
scala> val input : List[(Int,String)] = List((1,"apple"),(2,"ball"),(3,"cat"),(4,"doll"),(5,"eggs"))
input: List[(Int, String)] = List((1,apple), (2,ball), (3,cat), (4,doll), (5,eggs))
scala> input.foldLeft(List.empty[Int]){case (acc, (n,str)) => if(str.length ==4) acc :+ n else acc}
res3: List[Int] = List(2, 4, 5)
这将有助于:
tuple2.filter(_._2.size==4).map(_._1)
在Scala REPL中:
这将有助于:
tuple2.filter(_._2.size==4).map(_._1)
在Scala REPL中: