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

45

我有一个字符串变量,比如说:

str = "hello, world"

我如何将原始字符串转换为单个字符的数组?

上面示例的期望结果是:

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

如果您展示所需的输入和输出,将会很有帮助。 - Mark Thomas
是的,我知道这一点,但是一旦我将分割字符串转换后,我想要添加另一个字符串进去,然后使用join将其转换为数组。 - user557657
1
很难确定这里在问什么。这个问题含糊不清、模糊、不完整、过于宽泛或者是修辞性的,无法在当前形式下得到合理的回答。 - the Tin Man
谢谢,还有什么你想说的吗? - user557657
所以列表是一个数组,我使用“list = list +“,”+ name”添加名称。 - user557657
6
你是否很难举例说明你想要做的事情? - kurumi
7个回答

92

我注意到这个页面在通用的“string to char array ruby”谷歌搜索中出现。

如果你只想在Ruby中将字符串转换为字符数组,

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

3
简短而简洁,正是我所需要的。 - Joseph

29
我不理解你的问题,但如果你想将字符串转换为数组:
>> "a string".split("")
=> ["a", " ", "s", "t", "r", "i", "n", "g"]

是的,我知道这一点,但是一旦我将分割字符串转换后,我想要添加另一个字符串进去,然后使用join将其转换为数组。 - user557657
1
你应该提供你想做什么的示例。我无法理解你所说的内容。 - kurumi
这句话没有意义。你不能使用join将字符串转换为数组。 - the Tin Man

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

str = "a,b,c" 现在我们对 str 进行分割,结果是 ["a", "b","c"]。现在我想在分割后的 str 中添加一个字符串,然后使用 join(",") 将 str + 字符串连接起来。 - user557657

1
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

我认为主要问题是你试图使用字符串,而实际上应该使用数组。第二个问题是你将逗号分隔的字符串与数组或列表混淆了。

在 Ruby 中,列表和数组是不同于字符串的对象。字符串适用于存储文本和有时二进制数据。

数组适用于存储数据序列,需要通过数值索引进行访问。队列和栈通常是基于数组编写的,因为数组使得从开头或结尾添加和删除元素变得容易。

对于你的目的,我建议使用一个数组对象,然后在需要字符串表示形式时,使用join(',')将数组连接起来。

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

0

不要忘记 scan

在我的情况下,我有一个真正的朋友代码,一个“大”的整数(8位数字),为了更好的可读性,我想每2个数字放一个破折号:

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

你的解决方案将会是:

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

0
如果您想让您的“列表”成为名称集合的字符串表示,并且您想要添加一个名称(也是字符串),并将其与其他名称用逗号(例如)分隔开来,使结果成为字符串,则只需进行字符串连接即可:
list + ',' + name

我认为更好的方法是使用字符串插值:

"#{list},#{name}"

这使得你正在操作数据以格式化它更加清晰。

然而,如果你想通过逗号将你的“列表”转换为数组并在末尾添加名称变量,答案基本相同,使用 String#split 和数组连接:

list.split(',') + name

希望其中之一是你问题的解决方案!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接