0
votes

Créer une chaîne séparée des virgules dans le premier élément d'un tableau Ruby

Cela peut sembler étrange et j'ai fait un peu de googling, cependant, je ne suis pas vraiment un programmeur, (sysops) et je tente de comprendre comment transmettre des données à l'API AWS dans le format requis, qui semble un peu étrange.

Ainsi, travailler avec des ressources dans AWS, j'ai besoin de passer des balises qui sont des clés et des valeurs. La clé est une chaîne. La valeur est une chaîne séparée par des virgules, dans le premier élément d'un tableau. Donc, en termes rubis, on dirait ça. xxx

et non xxx

Je suis créé avec certitude. Pas une très jolie petite application qui me permettra d'exécuter des documents SSM sur des instances ciblées dans AWS.

Je peux obtenir la chaîne dans un élément de tableau à l'aide de cette classe que j'ai créée xxx

i puis appelez ce validate.multi_value passant dans le tableau créé, mais Il crache une matrice de ma valeur de chaîne. xxx

Utilisation de Pry, j'ai vu qu'il obtient par exemple ["stade dev qa"] alors l'instruction IF fonctionne, puis il croit out ["stade", "dev", "qa"]] .

et j'en ai besoin pour générer ["Stage, Dev, QA"] Mais pour la vie de moi, je ne peux pas le faire fonctionner.

J'espère que c'est clair.

Si vous avez des suggestions, je serais très reconnaissant.

Je ne suis pas extrêmement expérimenté chez Ruby et que les méthodes de classe peuvent être manquées.


1 commentaires

sur une note latérale, voir Guide de style rubis pour Syntaxe de bloc multiligne, @ tags.each {| clé, valeur | doit être @ tags.each faire | clé, valeur | et fermer avec fin < / code> sur la dernière ligne.


3 Réponses :


2
votes

Si vos tableaux sont toujours à travers le format ["Stage de dev qa"] code>, nous devons d'abord diviser la chaîne dans les pièces que nous souhaitons:

def transform_array(arr)
  [arr.first.split(' ').join(',')]
end

transform_array(['stage dev qa'])
=> ['stage,dev,qa']


3 commentaires

Merci beaucoup, c'est très élégant. J'étais en quelque sorte venir à ce genre de conclusion, mais très verboisement. def self.multi_value (valeur) si valeur.Tri? {| Sub_string | sub_string.include? (",") || sub_string.include? ("")} résultat = [] valeur = valeur [0] .Split (/ [[ \ s] + /) valeur = valeur.join ("") résultat [0] = Ressort de retour Valeur de retour End extrémité


De rien, et oui, nous étions tous les deux à la fois sur la même voie :)


Pourquoi diviser la corde sur des espaces puis rejoindre les morceaux avec des virgules plutôt que de simplement convertir les espaces en virgules?



0
votes

Que pensez-vous de cela ?, Tout est traité dans la méthode de validation. Je ne sais pas si vous vouliez supprimer des valeurs répétées, mais, juste au cas où je le ferais, un xxx

deviendra xxx

et non xxx

voici le code xxx

édité, merci lacosténycodeur


1 commentaires

.ReMove n'est pas défini dans la classe de cordes dans Core Ruby, mais est fournie par Active_Support . Vous pouvez cependant utiliser .delete qui est dans Core Ruby



0
votes

Je ne vois pas de point dans la création d'une classe ici lorsqu'une méthode simple. XXX

Supposons, lorsqu'il est demandé, l'utilisateur entre, "stade dev, qa" (pour "env" ), "OS X" (pour "OS" ) et "Hell's anges" pour "groupe" . Ensuite: xxx

Si, comme je soupçonne, vous souhaitez seulement convertir des espaces en virgules pour "env" et non pour " " ou " groupe ", écrire: xxx

xxx < / Pré>

voir tableau # mappe , chaîne # gsub et < Un href = "https://ruby-doc.org/core-2.6.3/array.html#method--2b" rel = "NOFULY NOREFERRER"> Array # + . < p> obtient.strip.gsub (/ [[] + /, ',') simplement les chaînes les deux opérations s = gets.strip et s.gsub (/ [] + /, ',') . Enchaînant est banal dans Ruby.

L'expression régulière utilisée par gsub lit, "correspond à un ou plusieurs espaces ou virgules", [] étant un Classe de caractères , nécessitant l'un des caractères de la classe correspond à une correspondance, + signification que l'une ou plusieurs de ces espaces ou des virgules doivent être adaptées. Si la chaîne était "a, b , c" il y aurait deux matchs, "", " et ", "; gsub convertirait à la fois une seule virgule.

à l'aide de Imprimer plutôt que met Affiche l'entrée de l'utilisateur sur la même ligne Comme l'invite, immédiatement après ":" , plutôt que sur la ligne suivante. C'est bien sûr purement stylistique.

souvent on écrirait gets.chomp plutôt que obtient.strip . Supprimer les nouvelles lignes et autres espaces à la fin de la chaîne, Strip supprime également tout blancheur au début de la chaîne. bande est probablement préférable dans ce cas.


0 commentaires