2009-10-22 6 views
3

기본적으로이 질문에 대해 말합니다. 문자열의 주어진 색인 위치에있는 문자를 삭제하려면 어떻게해야합니까? String 클래스에는이 작업을 수행 할 수있는 메서드가없는 것 같습니다.Ruby에서 색인 위치에있는 문자를 제거하십시오.

내가 문자열 "HELLO는"내가 원하는이있는 경우 출력이가이

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

내가 해달라고 사용

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

슬라이스를 사용하는 경우 알고 할! 원래 문자열을 수정하기 때문에 여기에서 작동합니다. 맞습니까?

답변

2
$ 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" 
+0

'self.class.new (self) .maulin!과 큰 차이가 있습니까? n'과'self.dup.maulin! n? –

+0

나는 단지'dup.maulin이어야한다고 생각한다! 좋은 점 – DigitalRoss

9

Str.slice! 해? 에서 ruby-doc.org!

str.slice (Fixnum이라는) => Fixnum이라는 또는 전무 [...]

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

문자의 ascii 값을 반환합니다. 나는 문자열의 왼쪽에 무엇이 반환되는지 알고 싶다. – Maulin

+2

그런 다음'str.slice! (fixnum); str'. – Chuck

1

내가 한이 같은

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

여기서 c는 문자열이고 i는 삭제하려는 색인 위치입니다. 더 좋은 방법이 있습니까?

+0

조각! 문자열을 수정합니다. 슬라이스라고 부르세요! 삭제하고자하는 문자의 색인으로 문자열에 반환 값을 사용하지 마십시오. – JRL

4

Ruby 1.8을 사용하는 경우 delete_at (Enumerable에서 혼합)를 사용할 수 있습니다. 그렇지 않으면 1.9에서 slice!를 사용할 수 있습니다.

예 : 활용, 변경되지 않은 원래의 문자열을 떠날 필요가있는 경우

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

: 당신이 tap를 사용할 수있다 String 원숭이 패치에 필요 방지하기 위해

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

dup, 예 : abc.dup.tap.

관련 문제