如何在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中: