[#10209] Market for XML Web stuff — Matt Sergeant <matt@...>

I'm trying to get a handle on what the size of the market for AxKit would be

15 messages 2001/02/01

[#10238] RFC: RubyVM (long) — Robert Feldt <feldt@...>

Hi,

20 messages 2001/02/01
[#10364] Re: RFC: RubyVM (long) — Mathieu Bouchard <matju@...> 2001/02/05

[#10708] Suggestion for threading model — Stephen White <spwhite@...>

I've been playing around with multi-threading. I notice that there are

11 messages 2001/02/11

[#10853] Re: RubyChangeRequest #U002: new proper name for Hash#indexes, Array#indexes — "Mike Wilson" <wmwilson01@...>

10 messages 2001/02/14

[#11037] to_s and << — "Brent Rowland" <tarod@...>

list = [1, 2.3, 'four', false]

15 messages 2001/02/18

[#11094] Re: Summary: RCR #U002 - proper new name fo r indexes — Aleksi Niemel<aleksi.niemela@...>

> On Mon, 19 Feb 2001, Yukihiro Matsumoto wrote:

12 messages 2001/02/19

[#11131] Re: Summary: RCR #U002 - proper new name fo r indexes — "Conrad Schneiker" <schneik@...>

Robert Feldt wrote:

10 messages 2001/02/19

[#11251] Programming Ruby is now online — Dave Thomas <Dave@...>

36 messages 2001/02/21

[#11469] XML-RPC and KDE — schuerig@... (Michael Schuerig)

23 messages 2001/02/24
[#11490] Re: XML-RPC and KDE — schuerig@... (Michael Schuerig) 2001/02/24

Michael Neumann <neumann@s-direktnet.de> wrote:

[#11491] Negative Reviews for Ruby and Programming Ruby — Jim Freeze <jim@...> 2001/02/24

Hi all:

[#11633] RCR: shortcut for instance variable initialization — Dave Thomas <Dave@...>

13 messages 2001/02/26

[#11652] RE: RCR: shortcut for instance variable initialization — Michael Davis <mdavis@...>

I like it!

14 messages 2001/02/27

[#11700] Starting Once Again — Ron Jeffries <ronjeffries@...>

OK, I'm starting again with Ruby. I'm just assuming that I've

31 messages 2001/02/27
[#11712] RE: Starting Once Again — "Aaron Hinni" <aaron@...> 2001/02/27

> 2. So far I think running under TextPad will be better than running

[#11726] Re: Starting Once Again — Aleksi Niemel<zak@...> 2001/02/28

On Wed, 28 Feb 2001, Aaron Hinni wrote:

[ruby-talk:11485] Re: Sorting

From: "Ben Tilly" <ben_tilly@...>
Date: 2001-02-24 21:42:37 UTC
List: ruby-talk #11485
Dave Thomas <Dave@PragmaticProgrammer.com> wrote:
>"Wilka" <jvyxn@evghnyvfgvp.pbz> writes:
>
[...]
>Here are a couple of ways. The second may or may not be more
>efficient, as it only does the pattern match and to_i once for each
>string in the array.
>
>      strings = [ "Name 300", "Name 1", "Name 10", "Name 2" ]
>
>      # an inefficient way (if there are large numbers of strings)
>
>      digits = /\d+$/
>
>      res = strings.sort { |a, b|  digits.match(a)[0].to_i <=> 
>digits.match(b)[0].to_i}
>
>      # a more efficient way (perhaps)
>
>      res = strings.
>          collect {|e|    [ digits.match(e)[0].to_i, e ] }.
>          sort    {|a, b| a[0] <=> b[0] }.
>          collect {|e|    e[1]}
>
Note that both of these just sort the strings
based on the embedded number.  The Schwartzian
sort example that I gave earlier pays attention
to the number and works for a larger variety of
strings, including (for instance) mixed text,
most version number schemes, and dotted quad IP
numbers correctly.

(OTOH if I was in a hurry and hadn't already
thought about this problem before I would have
probably done something like the above as well.)

BTW I made it somewhat more complex (so it will
handle negative numbers, takes into account most
people's preference for case-insensitive sorts,
etc):

    def sort_split (s)
      # Each piece case insensitive then by number,
      # finally usual lexical order
      pieces = s.scan(/(\D*)(\d*)/)
      pieces.each {|elem|
        elem[0].downcase!
        elem[1] = elem[1].sub(/^0*/, '').to_i
        if "" != elem[0] and "-" == elem[0].slice(-1, 1)
          elem[0].chop!
          elem[1] *= -1
        end
      }
      pieces.push s
    end

    things = (-5..20).to_a.map {|i| "thing #{i}"}
    things.push (
      "thing ", "hello", "world", "This", "That", "This -", "this"
    )
    puts things.map {|e| sort_split(e)} .sort.map {|e| e[-1]}


Cheers,
Ben
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

In This Thread

Prev Next