6

StringRubyで文字列のすべてのプレフィックスを取得できるRuby クラスに組み込み関数はありますか。何かのようなもの:

"ruby".all_prefixes => ["ruby", "rub", "ru", "r"]

現在、私はこれのためにカスタム関数を作成しました:

def all_prefixes search_string
  dup_string = search_string.dup
  return_list = []
  while(dup_string.length != 0)
    return_list << dup_string.dup
    dup_string.chop!
  end 
 return_list 
end

しかし、私はよりルビーに似た、コードの少ない、魔法のようなものを探しています。注: もちろん、そのままでよいことは言うoriginal_stringまでもありません。

4

9 に答える 9

9

いいえ、このための組み込みメソッドはありません。次のようにできます。

def all_prefixes(string)
  string.size.times.collect { |i| string[0..i] }
end
all_prefixes('ruby')
# => ["r", "ru", "rub", "ruby"] 
于 2013-08-06T10:35:25.790 に答える
3

少し短い形式:

def all_prefixes(search_string)
  (0...(search_string.length)).map{ |i| search_string[0..i] }
end
all_prefixes 'ruby'
# => ["r", "ru", "rub", "ruby"]
于 2013-08-06T10:31:55.490 に答える
1
def all_prefixes(str)
  str.chars.inject([[], '']) {|(res, memo), c| [res << memo += c, memo] }.first
end
于 2013-08-06T10:44:11.037 に答える
1
str = "ruby"    
prefixes = str.size.times.map { |i| str[0..i] }  #=> ["r", "ru", "rub", "ruby"]
于 2013-08-06T11:17:00.630 に答える