Array.join ("\ n") не способ присоединиться с новой строки? - PullRequest
55 голосов
/ 19 сентября 2009

У меня есть массив ..

[1,2,3,4]

и я хочу строку, содержащую все элементы, разделенные новой строкой ..

1

2

3

4

но когда я пытаюсь [1,2,3,4].join("\n"), я получаю

1\n2\n3\n4

Мне кажется, что есть очевидный ответ, но я не могу его найти!

Ответы [ 8 ]

70 голосов
/ 19 сентября 2009

Да, но если вы напечатаете эту строку, в ней появятся символы новой строки:

irb(main):001:0> a = (1..4).to_a
=> [1, 2, 3, 4]
irb(main):002:0> a.join("\n")
=> "1\n2\n3\n4"
irb(main):003:0> puts a.join("\n")
1
2
3
4

Так что, кажется, достичь того, что вы желаете (?)

42 голосов
/ 12 сентября 2014

Небольшая ошибка, которая может возникнуть здесь, заключается в использовании одинарных кавычек вместо двойных. Это также имеет эффект рендеринга строк как \ n. Так

puts a.join("\n")   # correct

не совпадает с

puts a.join('\n')   # incorrect

Есть отличная запись о том, почему это так здесь .

9 голосов
/ 15 декабря 2014

На всякий случай, если кто-то ищет эту функцию в шаблоне ERB, попробуйте это:

(1..5).to_a.join("<br>").html_safe
5 голосов
/ 19 сентября 2009

Попробуйте также:

puts (1..4).to_a * "\n"
2 голосов
/ 09 сентября 2015

Вы можете не захотеть использовать html_safe, как сказал аджай, в зависимости от контекста. HTML-сейф может быть проблемой безопасности. Это зависит от того, был ли исходный ввод на самом деле html безопасным. HTML-сейф не должен вызываться при вводе напрямую от пользователя, и обычно его следует вызывать перед представлением.

https://bibwild.wordpress.com/2013/12/19/you-never-want-to-call-html_safe-in-a-rails-template/

[отредактировано в ответ на комментарий ниже]

0 голосов
/ 15 июня 2019

Используйте клавишу Enter или Return на вашей поверхности для печати. .-.

[1,2,3,4] .join ( "

")

0 голосов
/ 21 августа 2018

Как подразумевают некоторые другие ответы выше, Rails может экранировать ваш код перед рендерингом как html. Вот пример, который решает эту проблему (сначала очистите входные данные, чтобы вы могли «безопасно» вызвать html_safe для результата):

my_array = [1, 2, 3, 4]
my_array.map{ |i| i.to_s.sanitize }.join("\n").html_safe

Вам нужно sanitize, только если вы не доверяете вводам.

0 голосов
/ 15 декабря 2014

Как насчет этого Если вы хотите напечатать каждый элемент на новой строке ..

> a = [1, 2, 3, 4] 
> a.each{|e| puts e}
1
2
3
4
 => [1, 2, 3, 4] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...