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. p> et non p> 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. p> Je peux obtenir la chaîne dans un élément de tableau à l'aide de cette classe que j'ai créée p> i puis appelez ce validate.multi_value passant dans le tableau créé, mais Il crache une matrice de ma valeur de chaîne. p> Utilisation de Pry, j'ai vu qu'il obtient par exemple et j'en ai besoin pour générer J'espère que c'est clair. P> Si vous avez des suggestions, je serais très reconnaissant. P> Je ne suis pas extrêmement expérimenté chez Ruby et que les méthodes de classe peuvent être manquées. p> p> ["stade dev qa"] code> alors l'instruction IF fonctionne, puis il croit out ["stade", "dev", "qa"]] code>. p> ["Stage, Dev, QA"] Code > Mais pour la vie de moi, je ne peux pas le faire fonctionner. P>
3 Réponses :
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']
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é code>
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?
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 deviendra p> et non p> voici le code p> édité, merci lacosténycodeur P> P>
.ReMove code> n'est pas défini dans la classe de cordes dans Core Ruby, mais est fournie par Active_Support code>. Vous pouvez cependant utiliser .delete code> qui est dans Core Ruby
Je ne vois pas de point dans la création d'une classe ici lorsqu'une méthode simple. Supposons, lorsqu'il est demandé, l'utilisateur entre, Si, comme je soupçonne, vous souhaitez seulement convertir des espaces en virgules pour p> voir tableau # mappe a>, chaîne # gsub et < Un href = "https://ruby-doc.org/core-2.6.3/array.html#method--2b" rel = "NOFULY NOREFERRER"> Array # + . P> < p> L'expression régulière utilisée par à l'aide de souvent on écrirait "stade dev, qa" (pour code> "env" ), "OS X" (pour code> "OS" ) et "Hell's anges" code> pour "groupe" code>. Ensuite: p> "env" code> et non pour " " code> ou " groupe " code>, écrire: p> h1>
obtient.strip.gsub (/ [[] + /, ',') code> simplement les chaînes em> les deux opérations s = gets.strip code> et s.gsub (/ [] + /, ',') code>. Enchaînant est banal dans Ruby. P> gsub code> lit, "correspond à un ou plusieurs espaces ou virgules", [] code> étant un Classe de caractères EM>, nécessitant l'un des caractères de la classe correspond à une correspondance, + code> signification que l'une ou plusieurs de ces espaces ou des virgules doivent être adaptées. Si la chaîne était "a, b , c" code> il y aurait deux matchs, "", " code> et ", " code>; gsub code> convertirait à la fois une seule virgule. p> Imprimer code> plutôt que met code> Affiche l'entrée de l'utilisateur sur la même ligne Comme l'invite, immédiatement après ":" code>, plutôt que sur la ligne suivante. C'est bien sûr purement stylistique. P> gets.chomp code> plutôt que obtient.strip code>. Supprimer les nouvelles lignes et autres espaces à la fin de la chaîne, Strip CODE> supprime également tout blancheur au début de la chaîne. bande code> est probablement préférable dans ce cas. p> p>
sur une note latérale, voir Guide de style rubis pour Syntaxe de bloc multiligne,
@ tags.each {| clé, valeur | code> doit être@ tags.each faire | clé, valeur | code> et fermer avecfin < / code> sur la dernière ligne.