Удалить символ в позиции индекса в Ruby - PullRequest
8 голосов
/ 22 октября 2009

В основном, что говорит вопрос. Как я могу удалить символ в указанной позиции индекса в строке? Класс String, похоже, не имеет методов для этого.

Если у меня есть строка "HELLO", я хочу, чтобы вывод был таким

["ELLO", "HLLO", "HELO", "HELO", "HELL"]

Я делаю это, используя

d = Array.new(c.length){|i| c.slice(0, i)+c.slice(i+1, c.length)}

Я не знаю, если использовать ломтик! здесь будет работать, потому что он изменит исходную строку, верно?

Ответы [ 5 ]

10 голосов
/ 22 октября 2009

не будет стрит! сделай это? От ruby-doc.org:

str.slice! (Fixnum) => fixnum или nil [...]

 Deletes the specified portion from str, and returns the portion deleted.
7 голосов
/ 22 октября 2009

Если вы используете Ruby 1.8, вы можете использовать delete_at (смешанный с Enumerable), иначе в 1.9 вы можете использовать slice!

Пример:

mystring = "hello"
mystring.slice!(1)  # mystring is now "hllo"
# now do something with mystring
4 голосов
/ 22 октября 2009
$ 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"
2 голосов
/ 17 декабря 2017

Чтобы избежать необходимости обезьяньего патча String, вы можете использовать tap:

"abc".tap {|s| s.slice!(2) }
=> "ab"

Если вам нужно оставить исходную строку без изменений, используйте dup, например. abc.dup.tap.

1 голос
/ 22 октября 2009

Я сделал что-то подобное

c.slice(0, i)+c.slice(i+1, c.length)

Где c - строка, а i - позиция индекса, которую я хочу удалить. Есть ли лучший способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...