Scala高效集包含检测

时间:2015-09-08 11:43:42

标签: scala scala-collections

设置第一个项目集合的元组集合,例如

val xs = Seq(
  ((1 to 5).toSet ++ Set(9), "apple"),
  ((15 to 17).toSet,         "pear"),
  ((21 to 30).toSet,         "grape"))

给定值x:Int,如何有效识别第二项? (真实用例包括数千套。)

对于val x = 22,结果为Some("grape"),对于val x = 19,结果为None

注意每组中的值不一定是连续的。

注意集合不重叠(任何集合交集都证明为空)。

2 个答案:

答案 0 :(得分:5)

取决于您的使用案例,但鉴于您关注效率,我假设您要进行大量查找。

我还假设你使用了一个xs,并且很多次都在查找。

xs预处理到Int->String

的地图中
val xsMap = (xs flatMap { case (s, v) => s.map((_,v))}).toMap[Int, String]

然后它是微不足道的(和O(1))来查找元素

xsMap.get(22)            //> res0: Option[String] = Some(grape)
xsMap.get(19)            //> res1: Option[String] = None

答案 1 :(得分:1)

怎么样:

$categoryId = (isset($_GET['id']) ? $_GET['id']:NULL);

if ($categoryId) {
       try {
            // select specific video based on category id
            $sql = "SELECT videos.id, videos.name, videos.video_src, videos.pLike, videos.video_tag_id, category.video_tag FROM videos,category WHERE videos.video_tag_id = category.video_tag ORDER BY RAND() LIMIT 1";
            $query = $pdo->prepare($sql);
            $query->execute();
        } catch(Exception $e) {
            echo $e->getMessage();
            die();
        }
        //foreach for school
        $listCategoryVideo = $query->fetchAll(PDO::FETCH_ASSOC);

}else {
    echo "nope";
    die();
}//end if video catgeory was found and executed