2010-06-26 2 views

ответ

5
irb(main):024:0> "this is a test".split.drop(1) * " " 
=> "is a test" 

Отредактировано для добавления:

Объяснение:

  • #split По умолчанию разграничивает на пробельных.

  • #drop(1) избавляется от первой записи.

  • * " " делает то же самое, что и #join(" ").

+0

#drop, вот и все :) Мне действительно нужно начать работать в 1.9.1 больше. –

+0

Это тоже в 1.8.7 (только что проверено). –

+0

Этот, кажется, самый читаемый и краткий. Благодаря! – vikhyat

5

код

a = a.split[1..-1] * " " 

объяснение

String#split «s параметр по умолчанию ""

Array * String является псевдонимом для Array.join(String)

С другой стороны, я не уверен, что это более прозрачный тому, кто не знаком с рубином. Но любой, кто работал с строками Ruby немного, поймет, что происходит. И это намного чище, чем оригинальная версия.


UPDATE

Согласно just-my-correct-opinion «s ответ (который вы все должны голосовать вверх, а не у меня), если вы работаете рубин 1.9.1 (который вы должны быть, во всяком случае) или Ruby 1.8. 7, вы можете сделать:

a = a.split.drop(1) * " " 
+0

Не сокращайте себя слишком коротко. Единственная причина, по которой я знаю о '# drop' и' # drop_while', - это то, что я использовал их в Erlang и Haskell. Прежде чем я начал с этого, я тоже использовал кусочки. –

1

Что-то вроде следующих

a = a[a.index(' '), a.length-(a.index(' ')+1)] 

Нет проверки хотя

+1

Возможно, вы можете использовать '..' вместо', 'и -1 вместо своего последнего индекса? –

5

для кого-то, кто привык читать rexep это довольно чистый:

a = a.sub(/^\S+\s/, "") 

YMMV

+0

+1 довольно чистый. –

3

может быть, что делает процесс явно поможет

words = a.split 
words.pop 
a = words.join " " 
+0

Хороший ответ, но он удаляет первый элемент, а не последний. Используйте shift вместо pop. (regex answer по-прежнему остается лучшим) –

2

И если бы вы использовали это в течение некоторого кода вы можете создать методы String, и массив, чтобы сделать код читаемым. (также работает в 1.8.6)

class String 
    def words 
    split 
    end 
end 

class Array 
    def but_first 
    self[1..-1] 
    end 
    def to_sentence 
    join(' ') 
    end 
end 

str = "And, this is a sentence" 

puts str.words.but_first.to_sentence 
+0

Я просматривал ответы, думая о публикации только этого! –

Смежные вопросы