2017-07-13 11 views
0

文字列があります。この配列の文字列の中には、私が探している特定の部分文字列が含まれています。私は部分文字列を含む文字列の配列を取得したい。Rubyはサブ文字列を含む配列から文字列を取得します

私はこのようにそれを行うことを望んでいるだろう:

a = ["abc", "def", "ghi"] 
o.select(&:include?("c")) 

しかし、それは私にこのエラーを与える:

(repl):2: syntax error, unexpected ')', expecting end-of-input 
o.select(&:include?("c")) 
         ^
+0

は、あなたが使用する必要があります。

['abc', 'def', 'ghi'].grep(/c/) #=> ["abc"] 

は具体的には、結果の配列がpattern === elementが真であるすべての要素が含まれていますがブロック 'o.select {| e | ( 'c')} ' –

+6

' ['abc'、 'def'、 'ghi']。grep(/ c /) 'も同様に動作します。 – Stefan

+1

あなたは "プレッツェルコロン"構文を使用しようとしていますが、@SebastiánPalmaのように、引数を受け入れません。プレッツェルコロンの構文の詳細については、次の2つのドキュメントを参照してください。http://technology.customink.com/blog/2015/06/ruby-pretzels/およびhttps://stackoverflow.com/questions/1961030/ruby-ampersand-コロンショートカット – anothermh

答えて

2

あなたは&:にパラメータを渡すことはできません、ほとんどがあります。あなたが& -shorthandここで使用することができます

o.select{ |e| e.include? 'c' } 
4

:何かのようにあなたが行うことができます。それはむしろ非合理的です(これをしないでください)が、可能です。

あなたがそうのようなあなたのselectでチェックを行うことができますので、オブジェクトとメソッドを見つけるために管理しない場合:

o.select { |e| some_object.some_method(e) } 

(重要な部分は、some_objectsome_methodがすべてで同じにする必要があるということです繰り返し)

... Object#methodを使用すると、そのようなブロックを取得できます。それはto_proc& -shorthandの要件)を実装しており、呼び出されたときにsome_methodsome_objectに呼び出し、その引数を転送するものを返します。ちょっと好き:ちょっと

["abc", "def", "ghi"].select(&/c/.method(:=~)) 

:仕事をして、この特定のケースで

collection.select(&some_object.method(:some_method)) 

/c/とその方法=~

ここ
o.m(a, b, c) # <=> o.method(:m).to_proc.call(a, b, c) 

はあなたが& -shorthandでこれを使用する方法です冗長で読みやすさは比較的悪いです。
ここでもやり直してください。しかし、このトリックは他の状況で役立つことがあります。

+0

かなり気の利いた!私は以前それを見たことがない。 –

+0

その答えはhttps://codegolf.stackexchange.comに属します;-)素晴らしいショートカットです! – Stefan

+0

@Stefan nahでは、長時間の '.method'のために、その使用は通常の定義より長くなる傾向があります。だから、私はゴルフのユースケースを考え出すことができません。おそらく...最小限のトークン数で競合する場合は例外です。 –

5

あなたの配列は、ファイルlines.txt

abc 
def 
ghi 

だった場合、あなたはgrepコマンドラインユーティリティでcを含む行を選択します:

$ grep c lines.txt 
abc 

はRubyはEnumerable#grepとしてこれを採用しています。あなたはパターンとして正規表現を渡すことができ、それがこのパターンに一致する文字列を返します。

/c/ === 'abc' #=> true 
/c/ === 'def' #=> false 
/c/ === 'ghi' #=> false 
+2

grep(ハッシュ)#=> [{b:2}]は、[["a"、{b:2}、[3,4]、{c:5} '{b:2} .instance_of?(Hash)#=> true'と等価であるため、{c5} ''となります。 –

関連する問題