複数ヒットした場合、一つもヒットしなかった場合のことを考慮し、 配列を返すことにしてみました。
a.rb
ruby
1def my_filter(ary, v)
2 ary.inject([]) do |memo, vec|
3 memo << vec[1] if vec[0] == v
4 memo
5 end
6end
7
8def my_filter2(ary, v)
9 ary.select { |vec| vec[0] == v }.map { |vec| vec[1] }
10end
11
12p my_filter([ [1, nil], [5, 123], [3, 1900], [4, nil] ], 5)
13p my_filter([ [5, 123], [5, 1900] ], 5)
14p my_filter([ [1, 123] ], 5)
15p my_filter([ [] ], 5)
16p ''
17
18p my_filter2([ [1, nil], [5, 123], [3, 1900], [4, nil] ], 5)
19p my_filter2([ [5, 123], [5, 1900] ], 5)
20p my_filter2([ [1, 123] ], 5)
21p my_filter2([ [] ], 5)
実行結果
$ ruby a.rb
[123]
[123, 1900]
[]
[]
""
[123]
[123, 1900]
[]
[]
参考
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。