[英]Scala - generate Array of bytes based on range
我正在尝试解决一个(可能)琐碎的问题。 我想要一种很好的,简洁的方法来基于范围实例化字节数组。 到目前为止,这有效
Array(1 : Byte, 2 : Byte)
但我想用……
((1: Byte) to (10: Byte)).toArray
但是,这是Array[Int]
。
Range
不是通用的; 它继承自IndexedSeq[Int]
,因此无法创建“ Byte
Range
”。 (编辑:有关通用范围类型,请参见Daniel C. Sobral的答案!)
当您尝试((1: Byte) to (10: Byte))
, Byte
再次隐式转换回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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.