Think I need an Array#split

Hi,

wouldn't it be a good idea to have a method doing this:

['a','b','','c','d','','e'].split ''
  #=> [['a','b'],['c','d'],['e']]

I wrote this method for my program in Ruby, but if you were
interested in integrating it into the language, I would
like to contribute it to `array.c'.

I made both solutions available at
<http://projects.bertram-scharpf.de/tmp/arraysplit.tar.gz>.

Bertram

P.S.: For those who look at the C code: is it OK not to
destroy the last `cur' object?

···

--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de

I made both solutions available at
<http://projects.bertram-scharpf.de/tmp/arraysplit.tar.gz&gt;\.

I had a look, perhaps it could emulate String#split by performing an
"awk split" (on whitespace) if there is no delimiter argument given?
Also, allowing a Regexp as a
delimiter would further emulate the String#split functionality.

P.S.: For those who look at the C code: is it OK not to
destroy the last `cur' object?

Its fine, Ruby uses a mark-and-sweep GC, so unless you've explicitly
marked 'cur' yourself (pushing it onto another array will cause it to
get marked automatically), it will get destroyed at the next GC run.

Regards
Leon

···

On Wed, 5 Jan 2005 10:04:08 +0900, Bertram Scharpf <lists@bertram-scharpf.de> wrote:

"leon breedt" <bitserf@gmail.com> schrieb im Newsbeitrag news:270bd0c40501041728ba09e80@mail.gmail.com...

I made both solutions available at
<http://projects.bertram-scharpf.de/tmp/arraysplit.tar.gz&gt;\.

I had a look, perhaps it could emulate String#split by performing an
"awk split" (on whitespace) if there is no delimiter argument given?
Also, allowing a Regexp as a
delimiter would further emulate the String#split functionality.

Another option would be an optional block that evaluates to true for delimiters. I didn't look at the proposed implementation, but here's how I'd do it:

module Enumerable
  def split(delim = /\A\s*\z/, &b)
    b ||= lambda {|x| delim === x}
    inject([]) do |ar, x|
      if b.call x
        ar <<
      else
        ar[-1] << x
      end
      ar
    end
  end
end

Kind regards

    robert

···

On Wed, 5 Jan 2005 10:04:08 +0900, Bertram Scharpf > <lists@bertram-scharpf.de> wrote:

Very nice ideas, indeed. I widened my function.

<http://projects.bertram-scharpf.de/tmp/arraysplit.tar.gz&gt;

Is it now worth to become a part of Ruby?

Bertram

···

Am Donnerstag, 06. Jan 2005, 02:31:31 +0900 schrieb Robert Klemme:

"leon breedt" <bitserf@gmail.com> schrieb im Newsbeitrag
news:270bd0c40501041728ba09e80@mail.gmail.com...
>On Wed, 5 Jan 2005 10:04:08 +0900, Bertram Scharpf > ><lists@bertram-scharpf.de> wrote:
>>I made both solutions available at
>><http://projects.bertram-scharpf.de/tmp/arraysplit.tar.gz&gt;\.
>I had a look, perhaps it could emulate String#split by performing an
>"awk split" (on whitespace) if there is no delimiter argument given?
>Also, allowing a Regexp as a
>delimiter would further emulate the String#split functionality.

Another option would be an optional block that evaluates to true for
delimiters. I didn't look at the proposed implementation, but here's how

--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de