[#13775] Problems with racc rule definitions — Michael Neumann <neumann@...>

15 messages 2001/04/17
[#13795] Re: Problems with racc rule definitions — Minero Aoki <aamine@...> 2001/04/18

Hi,

[#13940] From Guido, with love... — Dave Thomas <Dave@...>

52 messages 2001/04/20

[#13953] regexp — James Ponder <james@...>

Hi, I'm new to ruby and am coming from a perl background - therefore I

19 messages 2001/04/21

[#14033] Distributed Ruby and heterogeneous networks — harryo@... (Harry Ohlsen)

I wrote my first small distributed application yesterday and it worked

15 messages 2001/04/22

[#14040] RCR: getClassFromString method — ptkwt@...1.aracnet.com (Phil Tomson)

It would be nice to have a function that returns a class type given a

20 messages 2001/04/22

[#14130] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Guy N. Hurst wrote:

21 messages 2001/04/24
[#14148] Re: Ruby mascot proposal — Stephen White <spwhite@...> 2001/04/24

On Tue, 24 Apr 2001, Conrad Schneiker wrote:

[#14188] Re: Ruby mascot proposal — matz@... (Yukihiro Matsumoto) 2001/04/25

Hi,

[#14193] Re: Ruby mascot proposal — "W. Kent Starr" <elderburn@...> 2001/04/25

On Tuesday 24 April 2001 23:02, Yukihiro Matsumoto wrote:

[#14138] Re: python on the smalltalk VM — Conrad Schneiker <schneik@...>

FYI: Thought this might be of interest to the JRuby and Ruby/GUI folks.

27 messages 2001/04/24
[#14153] Re: python on the smalltalk VM — Andrew Kuchling <akuchlin@...> 2001/04/24

Conrad Schneiker <schneik@austin.ibm.com> writes:

[#14154] array#flatten! question — Jim Freeze <jim@...> 2001/04/24

Hello.

[#14159] Can I insert into an array — Jim Freeze <jim@...> 2001/04/24

Ok, this may be a dumb question, but, is it possible to insert into an

[#14162] Re: Can I insert into an array — Dave Thomas <Dave@...> 2001/04/24

Jim Freeze <jim@freeze.org> writes:

[#14289] RCR: Array#insert — Shugo Maeda <shugo@...> 2001/04/27

At Wed, 25 Apr 2001 01:28:36 +0900,

[#14221] An or in an if. — Tim Pettman <tjp@...>

Hi there,

18 messages 2001/04/25

[#14267] Re: Ruby mascot proposal — "Conrad Schneiker" <schneik@...>

Danny van Bruggen,

16 messages 2001/04/26

[#14452] How to do it the Ruby-way 3 — Stefan Matthias Aust <sma@3plus4.de>

First a question: Why is

21 messages 2001/04/30

[ruby-talk:13599] Re: #U017 "partition" method -- followup

From: David Alan Black <dblack@...>
Date: 2001-04-10 21:28:31 UTC
List: ruby-talk #13599
Hi --

On Sat, 7 Apr 2001, Guy N. Hurst wrote:

> Array#split would make an array of subarrays based on a block:
>
> [1,2,3,4,5].split{|x| x<=>3}    # => [[3],[4,5],[1,2]]
>
> ary=["an","a","the","when","if","can","do"]
> ary.split{|x| x.length }  # => [[],["a"],["an","if","do"],["the","can"],["when"]]

Here, just for the sake of seeing it (in some form) in action, is an
implementation of something close (see further comments):

   class Array
     def split
       results = {}
       ary2 = []
       each do |e|
	 y = yield(e)
	 results[y] ||= ary2.size
	 ary2[results[y]] ||= []
	 ary2[results[y]].push(e)
       end
       ary2
     end
   end

   [1,2,3,4,5].split{|x| x<=>3}
      # => [[1, 2], [3], [4, 5]]

   ary=["an","a","the","when","if","can","do"]
   ary.split{|x| x.length}
      # => [["an", "if", "do"], ["a"], ["the", "can"], ["when"]]

   # (Alternate #each:
   #   each do |e|
   #     (ary2[results[yield(e)] ||= ary2.size] ||= []) .push(e)
   #   end
   # :-)

Obviously my version goes through the array and creates (or appends to)
the appropriate subarray based on what it finds, in order.  I sense
that this might be good, since otherwise the method would have
to decide (for instance) that lengths should be returned in ascending
order, while spaceships should be returned in x=,x<,x> order (taking
your hypothetical output literally).

> It could also be made to generate a hash, to allow for block output
> other than just numbers:
>
> ary.split{|x| x[0..0]}  # => {"a"=>["an","a"], "t"=>["the"], etc... }

Funny -- I've been dealing with something quite like that, where I'm
taking a bunch of file names which cluster according to their first
four characters and hashing and arraying them in various ways.

Anyway, wouldn't this have to be a different method?  How would #split
(or whatever it's called) know to construct a hash, rather than an
array -- and, come to think of it, would one really want it returning
different types depending on the input?


David

-- 
David Alan Black
home: dblack@candle.superlink.net
work: blackdav@shu.edu
Web:  http://pirate.shu.edu/~blackdav

In This Thread

Prev Next