11
votes

Supprimer un caractère à une position d'index dans Ruby

Fondamentalement, quelle est la question. Comment puis-je supprimer un caractère à une position d'index donnée dans une chaîne? La classe de cordes ne semble pas avoir de méthodes pour le faire.

Si j'ai une chaîne "bonjour", je veux que la sortie soit ceci xxx

je fais qu'utilisant xxx

je ne sais pas si vous utilisez une tranche! Travaillera ici, car il modifiera la chaîne d'origine, non?


0 commentaires

5 Réponses :


14
votes

ne sera pas str.slice! fais-le? De ruby-doc.org:

str.slice! (fixnum) => fixnum ou nil [...] p>

 Deletes the specified portion from str, and returns the portion deleted.


2 commentaires

Il renvoie la valeur ASCII du personnage. Je veux que ce soit à gauche de la chaîne à retourner.


Alors str.slice! (Fixnum); str .



2
votes

J'ai fait quelque chose comme ça xxx

où c est la chaîne et je suis la position de l'index que je veux supprimer. Y a-t-il une meilleure façon?


2 commentaires

tranche! va modifier la chaîne en place. Alors appelle juste des tranches! Sur votre chaîne avec l'index du caractère que vous voulez supprimé. N'utilisez pas la valeur de retour.


Bien sûr, vous pouvez obtenir exactement le même comportement non destructif que la tranche en utilisant simplement les index de la syntaxe du support: C [0, I] + C [i + 1, C.Length]



9
votes

Si vous utilisez Ruby 1.8, vous pouvez utiliser Suppry_AT (mélangé à partir d'énumérable), sinon 1.9, vous pouvez utiliser des tranches!.

Exemple: P>

mystring = "hello"
mystring.slice!(1)  # mystring is now "hllo"
# now do something with mystring


1 commentaires

delete_at ne fait pas partie de énumérable . Il ne fait que partie de tableau . Donc delete_at n'est pas disponible dans string .



4
votes
$ cat m.rb
class String
  def maulin! n
    slice! n
    self
  end
  def maulin n
    dup.maulin! n
  end
end
$ irb
>> require 'm'
=> true
>> s = 'hello'
=> "hello"
>> s.maulin(2)
=> "helo"
>> s
=> "hello"
>> s.maulin!(1)
=> "hllo"
>> s
=> "hllo"

1 commentaires

Y a-t-il une grande différence entre self.class.new (auto) .Maulin! n et self.dup.maulin! n ?



3
votes

Pour éviter d'avoir besoin d'avoir besoin de singe patch string Vous pouvez utiliser appuyez sur : xxx

si vous devez laisser votre chaîne d'origine Non altéré, utilisez DUP , par exemple. abc.dup.tap .


0 commentaires