1
votes

split by newline - renvoie un tableau contenant la chaîne d'origine si aucune correspondance

J'ai récemment découvert que la méthode String # split renvoie un tableau à un élément contenant la chaîne d'origine si aucune correspondance n'est trouvée:

if "azerty keyboard".match(/\n/)
...# split here
end

Que serait un solution pour ne pas diviser s'il n'y a pas de correspondance trouvée? Utilisez simplement:

"azerty keyboard".split(/\n/)
=> ["azerty keyboard"] 

"azerty keyboard".split(',')

=> ["azerty keyboard"] 

ou il existe un meilleur moyen?


2 commentaires

Ou "azerty" .include? ("\ N")


À quoi sert un conditionnel avant le fait lorsque la taille du tableau résultant vous indique ce résultat et n'entraîne aucune surcharge substantielle.


3 Réponses :


0
votes

De toute évidence, vous ne l'exécuteriez pas si vous savez ce que la chaîne contient déjà mais supposez que vous avez un objet chaîne:

string = "azerty keyboard"
split_string = string.split(/\n/) if string.include?("\n")
=>nil


0 commentaires

3
votes

Puisque nous jouons avec Ruby, vous pouvez ouvrir la classe String et créer une nouvelle fonction qui fonctionne comme vous le souhaitez:

"azerty keyboard".split_if(/\n/)
=> "azerty keyboard"

"azerty keyboard".split_if(' ')
=> ["azerty", "keyboard"]

Ce qui puis retournez:

class String
  def split_if(matches)
    match(matches) ? split(matches) : self
  end
end

Gardez à l'esprit que ce n'est pas parce que nous pouvons que nous devrions que nous devrions toujours le faire. Certaines personnes pensent que l'ouverture de cours est un grand non-non. Alors devriez-vous faire cela? Cela dépend de vous, de votre équipe et des besoins de votre application.


0 commentaires

0
votes

Vous pouvez également donner un bloc à match au lieu d'utiliser l'instruction if :

str = 'azerty keyboard'
str.match(/\n/) {|m| str.split(m[0])} || str


0 commentaires