2016-04-10 38 views
0

假設val s = Seq[Int],我想獲得其所有元素的生產。該值保證大於Int.MaxValue但小於Long.MaxValue,所以我希望該值爲Long類型。如何在Scala中獲得Seq [Int]的Long類型生產?

看來我不能用product/foldLeft/reduceLeft由於LongInt是不同的類型沒有任何關係;因此我需要自己編寫一個for-loop。有沒有體面的方式來實現這一目標?

注意:我只是想問一下使用內置庫的可能性,但仍然可以用下面的「醜陋」代碼。

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

「T似乎我不能使用產品/ foldLeft/reduceLeft由於long和int是不同的類型沒有任何關係;」這是錯誤的。確切地看到我的回答 –

回答

4

沒有必要混淆asInstanceOf或你自己的循環。 foldLeft作品就好

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'。 –

相關問題