diff --git a/chapter02/worksheets/solution2.1.7.3_AR.scala b/chapter02/worksheets/solution2.1.7.3_AR.scala new file mode 100644 index 0000000..af565dd --- /dev/null +++ b/chapter02/worksheets/solution2.1.7.3_AR.scala @@ -0,0 +1,12 @@ +/** author: Andreas Röhler */ + +/** Exercise 2.1.7.3 +Given two sequences p: Seq[String] and q: Seq[Boolean] of equal length, compute a +Seq[String] with those elements of p for which the corresponding element of q is true. +Hint: use zip, map, filter. */ + +Seq("Joe", "Bob", "Mary").zip(Seq(true, false, true)).map { case (x, y) => if (y == true) x }.filter(_ != (())).map{ case x => x.toString } + +// scala> :load solution2.1.7.3_AR.scala +// Loading solution2.1.7.3_AR.scala... +// res17: Seq[String] = List(Joe, Mary) diff --git a/chapter02/worksheets/solution2.1.7.3_as_function_SW.scala b/chapter02/worksheets/solution2.1.7.3_as_function_SW.scala new file mode 100644 index 0000000..696be96 --- /dev/null +++ b/chapter02/worksheets/solution2.1.7.3_as_function_SW.scala @@ -0,0 +1,21 @@ +/** author: Sergei Winitzki */ + +/** Exercise 2.1.7.3 +Given two sequences p: Seq[String] and q: Seq[Boolean] of equal length, compute a +Seq[String] with those elements of p for which the corresponding element of q is true. +Hint: use zip, map, filter. */ + +val names: List[String] = List("Joe", "Bob", "Mary") +val a: List[Boolean] = List(true, false, true) + +def selectTrueOperatorSyntax(names: List[String], flags: List[Boolean]): List[String] = + names zip flags filter (_._2) map (_._1) + +selectTrueOperatorSyntax(names, a) + +// scala> :load solution2.1.7.3_as_function_SW.scala +// Loading solution2.1.7.3_as_function_SW.scala... +// names: List[String] = List(Joe, Bob, Mary) +// a: List[Boolean] = List(true, false, true) +// selectTrueOperatorSyntax: (names: List[String], flags: List[Boolean])List[String] +// res27: List[String] = List(Joe, Mary)