2016-04-10 4 views
0

val s = Seq[Int]とし、すべての要素の生産を得たいとします。値はInt.MaxValueよりも大きく、Long.MaxValueより小さくなることが保証されていますので、この値がLongタイプであることを願っています。ScalaでSeq [Int]のロング型生産を取得するにはどうすればよいですか?

私が原因LongIntはどんな関係のないさまざまな種類があり、実際にproduct/foldLeft/reduceLeftを使用することはできませんようです。したがって私はforループを自分で書く必要があります。この目標を達成するための適切な方法はありますか?

注:私は、組み込みライブラリを使用する可能性を尋ねていますが、下の「醜い」コードでも問題ありません。実際に

def product(a: Seq[Int]): Long = { 
    var p = 1L 
    for (e <- a) p = p * e 
    p 
    } 
+0

うまくfoldLeft作品は「tは事実のために長いとintはどんな関係なく、異なる種類があり、私は製品を使用することはできません/ foldLeft/reduceLeftようです。」これは間違っています。私の答え –

答えて

4

asInstanceOfや自分のループを混乱させる必要はありません。

val xs = Seq(1,1000000000,1000000) 
xs.foldLeft(1L)((a,e) => a*e) 
//> res0: Long = 1000000000000000 
1

どの程度

def product(s: Seq[Int]) = s.map(_.asInstanceOf[Long]).fold(1L)(_ * _)

、あなたの質問を再読み込み、製品自体の存在を知ったた、あなただけ行うことができます:

def product(s: Seq[Int]) = s.map(_.asInstanceOf[Long]).product

+0

を正確に見てください!私はそれを実現しませんでした!ところで、個人的に私は 'toLong'を好む。 –

関連する問題