Создание строки пробелов переменной длины в Mathematica - PullRequest
5 голосов
/ 21 мая 2011

Следующая функция Mathematica f создает строку пробела длины n.

f[n_]:=Fold[StringJoin,"",Array[" "&,n]]

Для создания этой функции должно быть миллион вариантов.

Как бы вы сделали это?

Ответы [ 5 ]

10 голосов
/ 21 мая 2011
f[n_] := StringJoin @ ConstantArray[" ", n]

Редактировать: , поскольку @ идиоматичен как @@, немного быстрее (спасибо Mr.Wizard за сравнительный анализ) и короче, я обновил решение.

5 голосов
/ 21 мая 2011
f[n_] := FromCharacterCode[ConstantArray[32, {n}]]

Кстати: вы должны знать, что этот тип вопросов не одобряется в faq :

Какие вопросы мне не следует задавать здесь?

Вы должны только задавать практические, отвечающие на вопросы вопросы, основанные на реальных проблемах, с которыми вы сталкиваетесь.Болтливые, открытые вопросы уменьшают полезность нашего сайта и отталкивают другие вопросы от главной страницы.Чтобы ваш вопрос не был помечен и, возможно, удален, не задавайте субъективных вопросов, где…

1. every answer is equally valid: “What’s your favorite ______?”

Не удивляйтесь, если вопрос закрыт.

3 голосов
/ 21 мая 2011
f[n_] := StringJoin[Table[" ", {n}]]
2 голосов
/ 22 мая 2011
f = ConstantArray[" ", #] <> "" &;

Это примерно в два раза быстрее, чем функция Тис Хайдеке, , но не так быстро, как функция Шерда.


Для больших n более длинная начальная строкаполезно.Это быстрее, чем метод Шёрда для n > 10000:

f2ss = " "~ConstantArray~499 <> "";
f2[n_ /; n < 500] := StringTake[f2ss, n]
f2[n_ /; n < 5000] := StringTake[ConstantArray["          ", ⌈n/10⌉] <> "", n]
f2[n_] := StringTake[ConstantArray[f2@400, ⌈n/400⌉] <> "", n]
2 голосов
/ 22 мая 2011

Spacer и Invisible также могут быть полезны для создания пробелов, с различиями в том, как вы определяете размер пространства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...