我正在尝试解决一个(可能)微不足道的问题。我想要一种简洁的方式来根据范围实例化字节数组。到目前为止,这有效
Array(1 : Byte, 2 : Byte)
但我想用 sth like
((1: Byte) to (10: Byte)).toArray
然而,这是Array[Int]
。
Range
不是通用的;它继承自IndexedSeq[Int]
,因此无法创建“ Range
of Byte
”。(编辑:见 Daniel C. Sobral 对通用范围类型的回答!)
当您尝试((1: Byte) to (10: Byte))
时,Byte
s 会再次隐式转换回Int
。
怎么样:
(1 to 10).map(_.toByte).toArray
这将导致两次通过集合;如果这是一个问题,非严格的观点将纠正这一点:
(1 to 10).view.map(_.toByte).toArray
虽然Ben James的 回答是正确的,但对于任何有:的类型,都有一个更通用的范围。T
Intergral[T]
NumericRange
import scala.collection.immutable.NumericRange
NumericRange(1: Byte, 10:Byte, 1: Byte).toArray
另一种选择是将结果数组映射到字节而不是映射范围。例如,并使用一种Array
方法:
Array.range(1, 10).map(_.toByte)