Вывод без ящиков

Мой первый час с (увлекательным) языком J, и все идет хорошо, но я столкнулся со своей первой проблемой, которую не могу проанализировать с помощью документации.

Как посчитать символы в строке:

 y =. 'hello world'
 (~. y) ; " 0 (+/ "  1 =y)
┌─┬─┐
│h│1│
├─┼─┤
│e│1│
├─┼─┤
│l│3│
├─┼─┤
│o│2│
├─┼─┤
│ │1│
├─┼─┤
│w│1│
├─┼─┤
│r│1│
├─┼─┤
│d│1│
└─┴─┘

Но как я могу потерять коробки? Я так понимаю, что ; объединяет два элемента в горизонтальном блоке, но, кажется, это сложно сделать без символов блока. Как я могу получить:

h 1
e 1
l 3

и так далее? Это вариант презентации?


j
person cormullion    schedule 22.01.2014    source источник
comment
К сожалению, вы не можете потерять коробки. Кстати, вам может понравиться ({.;#)/.~y для подсчета.   -  person Eelvex    schedule 23.01.2014


Ответы (1)


Что ж, для начала вы должны заметить, что вы не можете группировать в матрицу элементы разных типов. Бокс здесь помогает, потому что он ставит все элементы на одну ногу: все коробки.

Вы можете отформатировать (":) в текст и сшить (,.) вместо ссылки (;):

(~.y),. (2 ": "0 +/ "1 = y)

2 в 2 ": служит индикатором формата, шириной 2 цифры, заполненным пробелом.

ОБНОВИТЬ:

Или в стиле Eelvex:

({. , 2&":&#) /. ~ y

Здесь есть несколько новых элементов. Используя append (,) вместо stitch (,.), поскольку каждый результат key (/.) создается отдельно, мы не прикрепляем два массива бок о бок, а скорее создаем один большой массив по одной строке за раз.

person MPelletier    schedule 22.01.2014
comment
Спасибо, это имеет смысл. ,. - это хорошо, и альтернатива мне тоже нравится. - person cormullion; 23.01.2014