web-dev-qa-db-fra.com

peut convertir une chaîne en tableau?

# (this give me list eg : ,s, s, m ...
list = list + "," + name

je veux utiliser split et ensuite rejoindre ... essayez d'utiliser ci-dessous .. je ne sais pas ce que je fais

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

des idées??

22
user557657

J'ai remarqué que cette page apparaît pour la recherche générique sur Google de "chaîne de caractères tableau de caractères Ruby".

Si vous voulez simplement convertir une chaîne en tableau de caractères en Ruby,

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

je ne comprends pas votre question, mais si vous voulez convertir une chaîne en tableau

>> "a string".split("")
=> ["a", " ", "s", "t", "r", "i", "n", "g"]
18
kurumi
str = "a,b,c"
list = str.split(/,/) # => ["a", "b", "c"]
list.join("-") # => "a-b-c"

D'après votre commentaire, il semble que vous souhaitiez également ajouter une chaîne (ou plusieurs chaînes) à la liste, puis la rejoindre dans une autre chaîne. Peut-être comme ça:

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

La syntaxe Ruby permet également d’appeler des opérateurs avec la notation "point", ce qui pourrait clarifier la situation:

str.split(/,/).<<('d').join(',') # => "a,b,c,d"
str.split(/,/).<<(list2).join(',') # => "a,b,c,d,e,f"
4
maerics
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"] 

mais vous voulez probablement quelque chose comme ceci (traiter les chaînes d'entrée et les assembler dans un tableau):

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"] 
1
Tilo

Je pense que le gros problème est que vous essayez d'utiliser une chaîne, alors que vous devriez vraiment utiliser un tableau. Un deuxième problème est que vous confondez une chaîne délimitée par des virgules avec un tableau ou une liste.

En Ruby, les listes et les tableaux sont des objets différents des chaînes. Les chaînes sont bonnes pour stocker du texte et parfois des données binaires. 

Les tableaux sont utiles pour stocker des séquences de données, où vous devez pouvoir y accéder par un index numérique. Les files d'attente et les piles sont généralement écrites au-dessus des tableaux, car ils facilitent l'ajout et la suppression d'éléments au début ou à la fin.

Pour ce faire, je vous recommande d’utiliser un objet Array, puis join(',') le tableau lorsque vous avez besoin de la représentation sous forme de chaîne. 

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

n'oubliez pas scan 

dans mon cas, j'ai un vrai code ami, un "grand" entier (8 chiffres), pour une meilleure lisibilité, je veux mettre des tirets tous les 2 chiffres: 

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

votre solution serait 

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

Si vous essayez de faire en sorte que votre "liste" soit une représentation sous forme de chaîne d'une collection de noms et que vous souhaitez y ajouter un nom (également une chaîne) délimitée du reste par (par exemple) une virgule, être une chaîne, tout ce dont vous avez besoin est une concaténation de chaîne:

list + ',' + name

Une méthode plus agréable pour le faire, du moins pour moi, est l'interpolation de chaîne:

"#{list},#{name}"

Cela rend plus clair le fait que vous manipulez des données pour les formater.

Toutefois, si vous souhaitez convertir votre "liste" en tableau en le séparant par des virgules et en ajoutant la variable name à la fin, la réponse est essentiellement la même, avec String#split et la concaténation du tableau:

list.split(',') + name

J'espère que l'une de ces deux solutions est la solution à votre problème!

0
Tom