J юникод индексатор доступа - PullRequest
1 голос
/ 19 января 2012

В J я могу сделать следующее:

r=:'0123456'
m=:3 } r
echo m

и печатает 3, как и должно быть.

Однако Unicode, похоже, не работает:

'▁▂▃▄▅▆▇'
m=: 3 } r
echo m

ничего не печатает. Я предполагаю, что это происходит из-за} индексации по байту - как правильно индексировать по позиции символа?

1 Ответ

3 голосов
/ 20 января 2012

Вы правы в том, что индексация приведенного списка является байтовой.Это потому, что его тип данных буквальный.Если вы хотите, чтобы он интерпретировался как Unicode, то список необходимо преобразовать в Unicode:

   datatype '①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'       NB. check datatype of list
literal
   # '①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'              NB. count items in list
60
   ucp '①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'            NB. convert to unicode point chars
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳
   datatype ucp '①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'   NB. check datatype
unicode
   # ucp '①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'          NB. count items in unicode list
20
   3} ucp '①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳'         NB. index into the list
④
...