4

ここでマインドブロックしますが、これをあまり見苦しくする方法がわかりません。

def getClosestSphere(ray: Ray, spheres: List[Sphere]): Sphere = {
    val map = new HashMap[Double, Sphere]
    for (sphere <- spheres) {
      val intersectPoint = sphere.intersectRay(ray)
      map.put(intersectPoint, sphere)
    }    
    map.minBy(_._1)._2  
  }

私が何をしているのか分かりますか?私は球のリストを持っています。各球にはメソッド intersectRay があり、double を返します。

その関数の結果が最小の Sphere を取得したいと思います。これを1行で実行できるようにするための優れた関数構造があることは知っていますが、それを見ることができません:(

4

2 に答える 2

14

あなたはただ行うことができます:

def getClosestSphere(ray: Ray, spheres: List[Sphere]): Sphere = {
  spheres.minBy(_ intersectRay ray)
}

余談ですが、スタイルのヒント:

可変コレクションを使用する場合は、修飾されたインポートを使用します。の場合java.util.SomeCollection、最初import java.{util => ju}に、次に名前を使用しますju.SomeCollection。の場合scala.collection.mutable.SomeCollectionは、最初import collection.mutableに名前を使用しますmutable.SomeCollection

于 2012-01-19T09:39:38.097 に答える
5
spheres.minBy(_.intersectRay(ray))
于 2012-01-19T09:37:43.290 に答える