можно преобразовать строку в массив? - PullRequest
23 голосов
/ 02 февраля 2011
# (this give me list eg : ,s, s, m ...
list = list + "," + name

я хочу использовать split, а затем присоединиться ... попробуйте использовать ниже ... я не знаю, что я делаю

list = list.split(',') + name + collect{|c| c.name}.to_sentence 
list = list.split(',') + name + collect{|c| c.name}.Join(",")

есть идеи ??

Ответы [ 7 ]

40 голосов
/ 09 мая 2016

Я заметил, что эта страница подходит для общего поиска Google "строка в массив массивов ruby".

Если вы просто хотите преобразовать строку в массив символов в ruby,

"string".chars
# ["s", "t", "r", "i", "n", "g"]
18 голосов
/ 02 февраля 2011

Я не понимаю ваш вопрос, но если вы хотите преобразовать строку в массив

>> "a string".split("")
=> ["a", " ", "s", "t", "r", "i", "n", "g"]
4 голосов
/ 02 февраля 2011
str = "a,b,c"
list = str.split(/,/) # => ["a", "b", "c"]
list.join("-") # => "a-b-c"

Из вашего комментария похоже, что вы также хотите добавить строку (или несколько строк) в список, а затем снова присоединиться к другой строке. Возможно так:

(str.split(/,/) << 'd').join(',') # => "a,b,c,d"
list2 = ['d', 'e', 'f']
(str.split(/,/) << list2).join(',') # => "a,b,c,d,e,f"

Синтаксис Ruby также позволяет вызывать операторы с «точечной» нотацией, поэтому это может прояснить ситуацию:

str.split(/,/).<<('d').join(',') # => "a,b,c,d"
str.split(/,/).<<(list2).join(',') # => "a,b,c,d,e,f"
1 голос
/ 11 апреля 2011
str = "a,b,c"
 => "a,b,c" 

array = str.split(/,/)
 => ["a", "b", "c"] 

# add more elements to the str:

str << ',x,y,z'
 => "a,b,c,x,y,z" 

array2 =  str.split(/,/)
 => ["a", "b", "c", "x", "y", "z"] 

но вы, вероятно, хотите что-то вроде этого (обработать входные строки и собрать их в массив):

array = []
str = "a,b,c"
array << str.split(/,/)
  => [["a", "b", "c"]] 

str = 'x,y,z'
array << str.split(/,/)
 => [["a", "b", "c"], ["x", "y", "z"]] 

array.flatten!
 => ["a", "b", "c", "x", "y", "z"] 
0 голосов
/ 09 августа 2018

не забудьте scan

в моем случае у меня есть настоящий код друга, «большое» целое число (8 цифр), для лучшей читаемости я хочу ставить тире каждые 2 цифры:

friend_code.scan(/../).join("-")

ваше решение будет

friend_code.scan(/./).join(",") 
0 голосов
/ 16 марта 2011

Я думаю, что большая проблема в том, что вы пытаетесь использовать строку, когда вам действительно нужно использовать массив. Вторая проблема заключается в том, что вы путаете строку с разделителями-запятыми с массивом или списком.

В Ruby списки и массивы являются объектами, отличными от строк. Строки хороши для хранения текста и иногда двоичных данных.

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

Для вашей цели я бы порекомендовал использовать объект Array, а затем join(',') массив, когда вам нужно представление строки.

ary = []        #=> []
ary << 'item 1' #=> ["item 1"]
ary << 'item 2' #=> ["item 1", "item 2"]
ary.join(',')   #=> "item 1,item 2"
0 голосов
/ 16 марта 2011

Если вы пытаетесь, чтобы ваш «список» был строковым представлением коллекции имен, и вы хотите добавить имя к этому (также к строке), отделенному от остальных (например) запятой, ирезультат должен быть строкой, все что вам нужно это конкатенация строк:

list + ',' + name

Более хороший способ сделать это, по крайней мере для меня, это интерполяция строк:

"#{list},#{name}"

Это делаетпонятнее, что вы манипулируете данными для их форматирования.

Однако, если вы хотите, чтобы ваш «список» был преобразован в массив путем разделения его запятыми и добавления переменной имени в конец, ответ по существуто же самое с String#split и конкатенацией массивов:

list.split(',') + name

Надеемся, что одно из этих двух решений вашей проблемы!

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