ruby 将字符串转换为字符数组?

4c8rllxm  于 2022-12-12  发布在  Ruby
关注(0)|答案(7)|浏览(211)

我有一个带有字符串值的变量。说:

str = "hello, world"

如何将其转换为原始字符串中各个字符的数组?
上述示例的预期结果为:

['h', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd']
zphenhs4

zphenhs41#

我注意到,这个页面出现的通用谷歌搜索“字符串到字符数组ruby”。
如果你只想用ruby把字符串转换成字符数组,

"string".chars
# ["s", "t", "r", "i", "n", "g"]
xjreopfe

xjreopfe2#

我不明白你的问题但是如果你想把字符串转换成数组

>> "a string".split("")
=> ["a", " ", "s", "t", "r", "i", "n", "g"]
z2acfund

z2acfund3#

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"
o4tp2gmn

o4tp2gmn4#

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"]
t5zmwmid

t5zmwmid5#

如果你试图让你的“list”成为一个名字集合的字符串表示,并且你想向其中添加一个名字(也是一个字符串),用(例如)逗号将其与其余的名字分隔开,并使结果成为一个字符串,那么你所需要的就是字符串连接:

list + ',' + name

至少对我来说,一个更好的方法是字符串插值:

"#{list},#{name}"

这使您更清楚地了解到您正在操作数据以对其进行格式化。
然而,如果你想把“list”转换成一个数组,用逗号分隔它,并在末尾添加name变量,答案基本上是一样的,用String#split和数组连接:

list.split(',') + name

希望这两个中的一个是你问题的解决方案!

5kgi1eie

5kgi1eie6#

我认为最大的问题是你试图使用一个字符串,而实际上你应该使用一个数组。第二个问题是你混淆了逗号分隔的字符串和数组或列表。
在Ruby中,列表和数组与字符串是不同的对象。字符串很适合存储文本,有时也适合存储二进制数据。
数组很适合存储数据序列,在这种情况下,你需要能够通过数字索引来访问它们。队列和堆栈通常写在数组的顶部,因为数组可以很容易地从开始或结束处添加和删除元素。
出于您的目的,我建议使用Array对象,然后在需要字符串表示时使用join(',')数组。

ary = []        #=> []
ary << 'item 1' #=> ["item 1"]
ary << 'item 2' #=> ["item 1", "item 2"]
ary.join(',')   #=> "item 1,item 2"
tmb3ates

tmb3ates7#

别忘了scan
在我的例子中,我有一个真正的朋友代码,一个“大”整数(8位),为了更好的可读性,我想把破折号每2位:

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

您的解决方案应该是

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

相关问题