이것은 C/C++에서 매우 간단하지만, 스칼라에서 가장 우아한 방법이 무엇인지 궁금합니다. 감사!Scala에서 List [Short]를 Array [Byte]로 변환하는 가장 좋은 방법은 무엇입니까?
2
A
답변
2
Scala/Java Short
의 상위 및 하위 바이트를 추출하기 위해 이동 및 마스킹과 같은 비트 연산을 고려하십시오 (C/C++에서와 매우 유사한 방식으로). 하자
val xs = (253 to 257).map(_.toShort).toList
xs: List[Short] = List(253, 254, 255, 256, 257)
그래서 각 튜플 각각 Short
값의 상부 및 하부 바이트를 수집
def upper(x: Short) = ((x >> 8) & 0xFF).toByte
upper: (x: Short)Byte
def lower(x: Short) = (x & 0xFF).toByte
lower: (x: Short)Byte
xs.map(x => (upper(x), lower(x))).toArray
res2: Array[(Byte, Byte)] = List((0,-3), (0,-2), (0,-1), (1,0), (1,1))
. 이 스칼라에서 할 매우 쉽게
xs.flatMap(x => Array(upper(x), lower(x))).toArray
res3: Array[Byte] = Array(0, -3, 0, -2, 0, -1, 1, 0, 1, 1)
0
위의 튜플의 배열을 병합에 한 가지 방법은, 사실, 당신은 거의 그대로 코드로 귀하의 질문에 영어 문장을 번역 할 수 있습니다. 당신이 List[Short]
가 l
라는이 가정 :
l.map(_.toByte).toArray
는 물론, 당신은 목록에있는 모든 Short
의 실제로 Byte
에 맞게 있는지 확인해야합니다, 그렇지 않으면 당신은 잘린 결과를 얻을 수 있습니다.
'shorts.flatMap (s => List ((s >> 8) .toByte, s.toByte)). toArray' – jwvh