Project

General

Profile

Actions

Feature #8921

open

Allow select, reject, etc to accept a regex

Added by kyledecot (Kyle Decot) over 10 years ago. Updated almost 4 years ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:57262]

Description

It would be handy if select could accept a regex. For example

%w[foo bar baz].select(/^ba/) # => ["bar", "baz"] 

This is currently possible via the slightly longer syntax

%w[foo bar baz].select{|i| i[/^ba/]} # => ["bar", "baz"] 

Related issues 1 (0 open1 closed)

Related to Ruby master - Feature #11049: Enumerable#grep_v (inversed grep)Closedmatz (Yukihiro Matsumoto)Actions

Updated by Hanmac (Hans Mackowiak) over 10 years ago

  1. it can be done via

class Regexp
def to_proc
proc {|o| self.match(o) }
end
end

  1. but i think the method you are looking for is grep
    %w[foo bar baz].grep /^ba/ # => ["bar", "baz"]

Updated by kyledecot (Kyle Decot) over 10 years ago

=begin
Yes, grep would be a suitable alternative for select w/ a regex in this instance. What about for reject though? I feel that

%w[foo bar baz].reject /^ba/ # ["foo"]

Is more readable than

%w[foo bar baz].grep /^[^ba]/ # ["foo"]

Using reject also makes it so that I don't have to rewrite my regular expression to negate what I'm looking for. My example is pretty trivial but I think that it would quickly get out of hand if trying to grep things "out" instead of "in".
=end

Updated by fuadksd (Fuad Saud) over 10 years ago

Shouldn't select/reject use threequals?
On Sep 18, 2013 12:25 PM, "kyledecot (Kyle Decot)"
wrote:

Issue #8921 has been updated by kyledecot (Kyle Decot).

=begin
Yes, grep would be a suitable alternative for select w/ a regex in this
instance. What about for reject though? I feel that

%w[foo bar baz].reject /^ba/ # ["foo"]

Is more readable than

%w[foo bar baz].grep /^[^ba]/ # ["foo"]

Using reject also makes it so that I don't have to rewrite my regular
expression to negate what I'm looking for. My example is pretty trivial but
I think that it would quickly get out of hand if trying to grep things
"out" instead of "in".
=end

Feature #8921: Allow select, reject, etc to accept a regex
https://bugs.ruby-lang.org/issues/8921#change-41882

Author: kyledecot (Kyle Decot)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

It would be really handy if for instance select could accept a regex.
For example

%w[foo bar baz].select /^ba/ # ["bar", "baz"]

I know that this is currently possible via the slightly longer syntax

%w[foo bar baz].select{|i| i[/^ba/] } # ["bar", "baz"]

--
http://bugs.ruby-lang.org/

Updated by fuadksd (Fuad Saud) over 10 years ago

I mean, couldn't select, reject and friends take one parameter in case no
block is passed and compare elements using the threequals operator. This
would enable one to do things like:

[1, 56, 12, 7, 39].select 0..20 #=> [1, 12]
%w( foo bar baz ).reject /^ba/ #=> [foo]

On Wednesday, September 18, 2013, Fuad Saud wrote:

Shouldn't select/reject use threequals?
On Sep 18, 2013 12:25 PM, "kyledecot (Kyle Decot)" <<javascript:_e({}, 'cvml', '');>>
wrote:

Issue #8921 has been updated by kyledecot (Kyle Decot).

=begin
Yes, grep would be a suitable alternative for select w/ a regex in this
instance. What about for reject though? I feel that

%w[foo bar baz].reject /^ba/ # ["foo"]

Is more readable than

%w[foo bar baz].grep /^[^ba]/ # ["foo"]

Using reject also makes it so that I don't have to rewrite my regular
expression to negate what I'm looking for. My example is pretty trivial but
I think that it would quickly get out of hand if trying to grep things
"out" instead of "in".
=end

Feature #8921: Allow select, reject, etc to accept a regex
https://bugs.ruby-lang.org/issues/8921#change-41882

Author: kyledecot (Kyle Decot)
Status: Open
Priority: Normal
Assignee:
Category:
Target version:

It would be really handy if for instance select could accept a regex.
For example

%w[foo bar baz].select /^ba/ # ["bar", "baz"]

I know that this is currently possible via the slightly longer syntax

%w[foo bar baz].select{|i| i[/^ba/] } # ["bar", "baz"]

--
http://bugs.ruby-lang.org/

--
Fuad Saud

twitter http://twitter.com/fuadsaud |
linkedinhttp://www.linkedin.com/in/fuadksd|
coderwall http://coderwal.com/fuadsaud | githubhttp://github.com/fuadsaud|

Updated by nobu (Nobuyoshi Nakada) over 10 years ago

  • Description updated (diff)

Updated by Anonymous over 10 years ago

On 09/18/2013 09:17 AM, Fuad Saud wrote:

I mean, couldn't select, reject and friends take one parameter in case
no block is passed and compare elements using the threequals operator.
This would enable one to do things like:

[1, 56, 12, 7, 39].select 0..20 #=> [1, 12]
%w( foo bar baz ).reject /^ba/ #=> [foo]

And then, because of Proc#===, there is this symmetry:

big = proc {|x| x>10}
=> #Proc:0x007f4770fcd730@(irb):7
[1,2,34].select &pr
=> [34]
[1,2,34].select pr
=> [34] # with proposed change

Updated by Anonymous over 10 years ago

@Hanmac (Hans Mackowiak): That's it, thanks!

Updated by kyledecot (Kyle Decot) over 10 years ago

Again, I understand that grep can do this but I feel that (especially in my reject example) that the intent is much clearer w/ my proposed addition. What would be the downside to adding something like this to select/reject (or Enumberable in general)?

Updated by fuadksd (Fuad Saud) over 10 years ago

Hey nobu have you thought about this? I think it's a pretty interesting change to be introduced.

Updated by kyledecot (Kyle Decot) about 8 years ago

Has there been any thought on this?

Updated by shyouhei (Shyouhei Urabe) about 8 years ago

Do you still need this? We now have grep_v which resembles your reject example.

Actions #13

Updated by shyouhei (Shyouhei Urabe) about 8 years ago

Actions #14

Updated by sawa (Tsuyoshi Sawada) almost 4 years ago

  • Description updated (diff)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0