2014-01-22 8 views
3

Мой первый час с (увлекательным) 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 

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

+2

К сожалению, вы не можете потерять боксы. Кстати, вам может понравиться '({.; #) /. ~ Y' для подсчета. – Eelvex

ответ

5

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

Одна вещь, которую вы можете сделать, это формат (":) к тексту и стежок (,.) вместо ссылка (;):

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

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

UPDATE:

Или в стиле Eelvex:

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

Там в несколько элементов, которые могут быть здесь новенький. Используя append (,) вместо строчки (,.), потому что каждый результат ключа (/.) производится отдельно, мы не склеиваем два массива бок о бок, а создаем один большой массив по одной строке за раз.

+0

Спасибо, это имеет смысл. ', .' хорошо, и мне тоже нравится альтернатива. – cormullion

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

  • Нет связанных вопросов^_^