# Re: Can't sort array

**URL:** <https://www.ruby-forum.com/t/re-cant-sort-array/78431>\
**Category:** Ruby\
**Created:** [December 5, 2006, 8:50pm UTC](https://www.ruby-forum.com/t/re-cant-sort-array/78431 "2006-12-05T20:50:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![bbiker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/97f17d/32.png) [@bbiker](https://www.ruby-forum.com/u/bbiker)\
**Post date:** [December 5, 2006, 8:50pm UTC](https://www.ruby-forum.com/t/re-cant-sort-array/78431/1 "2006-12-05T20:50:30Z")

</div>

Hi all,

I want to print all the methods in excel OLE object  
in alphabetic order but the sort method is  
unavailable. Can anyone explain it and help me fix it?

Thank you,

Li

## 

require ‘win32ole’  
excel = WIN32OLE.new(‘Excel.Application’)  
m = excel.ole\_methods  
p m.class  
p m.sort

##screen output

> > ruby sort1.rb

Array  
sort1.rb:6:in `sort': undefined method`\<=\>’ for  
Rows:WIN32OLE\_METHOD (NoMethodError)  
from sort1.rb:6

> > Exit code: 1

Try the following code to accomplish what you seem to want … this  
solution appeared in a previous thread

require ‘win32ole’

class WIN32OLE  
def list\_ole\_methods  
method\_names = ole\_methods.collect { |m| m.name }  
puts method\_names.sort.uniq  
end  
end

excel = WIN32OLE.new(‘Excel.Application’)  
excel.list\_ole\_methods  
excel.quit

---

<div class="post-metadata">

**Author:** ![bbiker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/97f17d/32.png) [@bbiker](https://www.ruby-forum.com/u/bbiker)\
**Post date:** [December 5, 2006, 9:30pm UTC](https://www.ruby-forum.com/t/re-cant-sort-array/78431/2 "2006-12-05T21:30:39Z")

</div>

Bernard K. wrote:

> require ‘win32ole’  
> excel = WIN32OLE.new(‘Excel.Application’)  
> m = excel.ole\_methods  
> p m.class  
> p m.sort  
> …

Since you want to sort by method name, give a block to sort, i.e.:

p m.sort{|a| a.name \<=\> b.name}

Cheers  
Chris

---

<div class="post-metadata">

**Author:** ![bbiker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/97f17d/32.png) [@bbiker](https://www.ruby-forum.com/u/bbiker)\
**Post date:** [December 6, 2006, 1:17am UTC](https://www.ruby-forum.com/t/re-cant-sort-array/78431/3 "2006-12-06T01:17:39Z")

</div>

> Since you want to sort by method name, give a block to sort, i.e.:
> 
> p m.sort{|a| a.name \<=\> b.name}

The line above doesn’t work but it will work if change to the follows

p m.sort{|a,b| a.name \<=\> b.name}

Li

---

<div class="post-metadata">

**Author:** ![bbiker](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/97f17d/32.png) [@bbiker](https://www.ruby-forum.com/u/bbiker)\
**Post date:** [December 7, 2006, 3:09am UTC](https://www.ruby-forum.com/t/re-cant-sort-array/78431/4 "2006-12-07T03:09:10Z")

</div>

On Wed, Dec 06, 2006 at 09:17:45AM +0900, Li Chen wrote:

> The line above doesn’t work but it will work if change to the follows
> 
> p m.sort{|a,b| a.name \<=\> b.name}

p m.sort\_by {|a| a.name}
