-2

配列と文字列を受け入れるメソッドを定義したい場合、配列内の指定された文字列で始まるすべての文字列を検索する必要があります。例 array["Jamaica","Japan","USA","中国"]; 指定された文字列が Ja の場合、Jamaica と Japan を返す必要があります。

4

4 に答える 4

2

keep_ifと正規表現を使用してみてください:

["Jamaica","Japan","USA","China"].keep_if { |c| c =~ /^ja/i }

# returns ["Jamaica", "Japan"]

これは静的な例です。正規表現を動的に作成するには、次のようにします。Regexp.new("^#{your_var}", true)

于 2013-02-05T22:26:23.393 に答える
0

Array の最も重要なメソッドは Array のドキュメントにはありませんが、Enumerableのドキュメントにはあります。ある条件に適合するすべての要素を見つける方法を探しています。

この条件は、文字列がいくつかの文字で始まることでした。文字列オブジェクトにそのためのメソッドがあればいいと思いませんか?

于 2013-02-05T23:28:05.500 に答える
0

これはやり過ぎですが、巨大な配列の場合はすぐに機能します。幸運なことに、私は昨日、 TRIEZと呼ばれる Ruby 用の新しい高速トライ ライブラリに出くわしました。次に実行gem install triezして、例から少し切り替えます。

require 'triez'
countries = ["Jamaica","Japan","USA","China"]
t = Triez.new
countries.each do |word|
  t[word] = 1
end

ja_countries = []
t.search_with_prefix 'Ja' do |suffix|
  ja_countries += "Ja#{suffix}"
end

これは C で実装されているので、巨大な配列では非常に高速であるに違いありません。

于 2013-02-05T22:06:00.797 に答える
0

配列を変更したくない場合は、Array クラスの select メソッドを使用できます。

["Jamaica","Japan","USA","China"].select{|item| item.match("Ja")}

アレイは無傷です。

于 2013-02-06T01:02:31.367 に答える