2016-11-29 3 views
0

Допустим, я хочу, чтобы преобразовать следующий список, состоящий из двух символов и чисел:список Convert обоих персонажей и целых чисел символов в Скале

List(1,2,3,'-',' ').map(a => something(a.toChar)) 

для какого-либо метода то. Теперь a.toChar будет символом, но не похожим на «1», «2» и «3». Точно так же трюки для целых чисел не будут работать для символов. Кто-нибудь знает, как это исправить?

+0

Что вы подразумеваете под этим «Теперь a.toChar будет персонажем, но не похожим на« 1 »,« 2 »и« 3 »? – pamu

+0

Какие трюки вы говорите? – pamu

+0

1.toChar! = '1', 2.toChar! = '2', ... Один трюк, который я нашел, был a => a + '0'. – Vincent

ответ

0

Преобразование целого числа в пределах диапазона в char путем преобразования его в промежуточную строку и получения 0-го символа индекса.

В случае действительного байта преобразуйте его в символ.

В случае любого другого целого или объекта есть случай в сопоставлении с образцом и преобразование в соответствующий результат.

scala> List(1,2,3,'-',' ').map { 
    | case a if a >= 0 && a <= 9 => s"$a"(0) 
    | case b if b.isValidByte => b.toByte.toChar 
    | } 
res19: List[Char] = List(1, 2, 3, -, ) 
1

Scala считает это List(1,2,3,'-',' ') быть List[Int] с элементами, как ' ' будучи просто другой способ выразить целое значение 32.

Если вы хотите изменить это List[Int] в List[Char], сохраняя ток символьные представления, но выражая все однозначные целочисленные значения в качестве эквивалента символов ASCII, вы можете сделать что-то вроде этого.

List(1,2,3,'-',' ').map(x => if (x <= 9) (x+48).toChar else x.toChar) 
// res0: List[Char] = List(1, 2, 3, -, ) 

Но вы можете по-прежнему сталкиваются с Int значения, которые не печатаемых символов. Лучше избегать этих коллекций смешанного типа.

Смежные вопросы