Skip to content

Instantly share code, notes, and snippets.

@Centaur
Last active August 29, 2015 14:09
Show Gist options
  • Save Centaur/3f255d78393a2cc1c1f0 to your computer and use it in GitHub Desktop.
Save Centaur/3f255d78393a2cc1c1f0 to your computer and use it in GitHub Desktop.
forEgret
def name2id1(name: String): Option[String] = name match {
case "name1" => Some("id1")
case "name2" => Some("id2")
case "name3" => Some("id3")
case _ => None
}
def name2id2(name: String): Option[String] = name match {
case "name1" => None
case "name2" => Some("id2")
case "name3" => Some("id3")
case _ => None
}
def name2id3(name: String): Option[String] = name match {
case "name1" => Some("id1")
case "name2" => Some("id2")
case "name3" => None
case _ => None
}
def name2id4(name: String): Option[String] = name match {
case "name1" => Some("id1")
case "name2" => None
case "name3" => Some("id3")
case _ => None
}
def name2id5(name: String): Option[String] = name match {
case "name1" => Some("id1")
case "name2" => None
case "name3" => None
case _ => None
}
def name2id6(name: String): Option[String] = name match {
case "name1" => None
case "name2" => None
case "name3" => None
case _ => None
}
def queryAll(names: List[String], qFunc: String => Option[String]): List[String] = {
@annotation.tailrec
def helper(remain: List[String], accu: List[String]): List[String] = remain match {
case Nil => accu
case head :: tail => qFunc(head) match {
case None => Nil
case Some(id) => helper(tail, id :: accu)
}
}
helper(names, Nil).reverse
}
val names = List("name1", "name2", "name3")
assert(queryAll(names, name2id1) == List("id1", "id2", "id3"))
assert(queryAll(names, name2id2) == Nil)
assert(queryAll(names, name2id3) == Nil)
assert(queryAll(names, name2id4) == Nil)
assert(queryAll(names, name2id5) == Nil)
assert(queryAll(names, name2id6) == Nil)
@lotusk
Copy link

lotusk commented Nov 13, 2014

def getIds(names:List[String])(func:String=>Option[Long]):List[Long]={

def getIds0(names:List[String],ids:List[Long]):List[Long]={
  if(names.isEmpty) ids
  else{
    val headIdOpt=func(names.head)
    if(headIdOpt.isEmpty) Nil
    else{
      getIds0(names.tail,headIdOpt.get::ids)
    }
  }
}
getIds0(names,Nil)

}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment