🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
6 messages
6 total messages Started by Przemysław Kowalczyk Mon, 02 Oct 2006 19:23
iteracja po tablicy kazdy z kazdym "ruby-way"
#210
Author: Przemysław Kowalczyk
Date: Mon, 02 Oct 2006 19:23
15 lines
1081 bytes
Witam,

mam taki akademicki problem: jak zrobic jakas operacje na kazdej parze  
elementow z jakiejs listy (tzn. kazdy z kazdym)? na razie robie to tak:

for i in 0..lst.size - 1
	for j in i + 1..lst.size - 1
		do_something(lst [i], lst [j])
	end
end

ale to wyglada dosc malo rubistycznie. jakies pomysly?

pzdr
	szeryf
Re: iteracja po tablicy kazdy z kazdym "ruby-way"
#211
Author: Jan Szumiec
Date: Mon, 02 Oct 2006 20:11
28 lines
1734 bytes
Przemysław Kowalczyk wrote:
> Witam,
>
> mam taki akademicki problem: jak zrobic jakas operacje na kazdej parze
> elementow z jakiejs listy (tzn. kazdy z kazdym)? na razie robie to tak:
>
> for i in 0..lst.size - 1
> 	for j in i + 1..lst.size - 1
> 		do_something(lst [i], lst [j])
> 	end
> end
>

A = [ .... ]
B = [ .... ]

A.each do | a |
   B.each do | b |
      do_something a, b
   end
end

Ewentualnie... zaimplementować sobie operację * na listach która
zwraca cosik co bierze blok dwuargumentowy :)

Pozdrawiam,
jasiek
Re: iteracja po tablicy kazdy z kazdym "ruby-way"
#213
Author: Marcin Mielżyński
Date: Mon, 02 Oct 2006 20:27
38 lines
1556 bytes
Przemysław Kowalczyk wrote:
> Witam,
> 
> mam taki akademicki problem: jak zrobic jakas operacje na kazdej parze 
> elementow z jakiejs listy (tzn. kazdy z kazdym)? na razie robie to tak:
> 
> for i in 0..lst.size - 1
>     for j in i + 1..lst.size - 1
>         do_something(lst [i], lst [j])
>     end
> end
> 
> ale to wyglada dosc malo rubistycznie. jakies pomysly?
> 
> pzdr
>     szeryf

class Array

     def each_pair
         self.each_index do |i|
             (i+1).upto(self.size-1) do |j|
                 yield self[i],self[j]
             end
         end
     end

end

lst = *(1..10)

lst.each_pair do |a,b|
     puts "#{a} #{b}"
end



lopex
Re: iteracja po tablicy kazdy z kazdym "ruby-way"
#212
Author: Przemysław Kowalczyk
Date: Mon, 02 Oct 2006 20:33
31 lines
1701 bytes
On Mon, 02 Oct 2006 22:11:21 +0200, Jan Szumiec <jan.szumiec@gmail.com>  
wrote:
>> mam taki akademicki problem: jak zrobic jakas operacje na kazdej parze
>> elementow z jakiejs listy (tzn. kazdy z kazdym)? na razie robie to tak:
>>
>> for i in 0..lst.size - 1
>> 	for j in i + 1..lst.size - 1
>> 		do_something(lst [i], lst [j])
>> 	end
>> end
>>
>
> A = [ .... ]
> B = [ .... ]
>
> A.each do | a |
>    B.each do | b |
>       do_something a, b
>    end
> end
>
> Ewentualnie... zaimplementować sobie operację * na listach która
> zwraca cosik co bierze blok dwuargumentowy :)

hmm, nie do konca o to mi chodzilo. A i B to ta sama lista, a w dodatku  
jezeli "przerobie" pare a,b to nie chce juz przerabiac b,a.

ale Marcin pokazal juz to, o co mi chodzilo.

pzdr
	szeryf
Re: iteracja po tablicy kazdy z kazdym "ruby-way"
#214
Author: Przemysław Kowalczyk
Date: Mon, 02 Oct 2006 20:37
38 lines
1788 bytes
On Mon, 02 Oct 2006 22:27:02 +0200, Marcin Mielżyński <lopx@gazeta.pl>  
wrote:

> Przemysław Kowalczyk wrote:
>> Witam,
>>  mam taki akademicki problem: jak zrobic jakas operacje na kazdej parze  
>> elementow z jakiejs listy (tzn. kazdy z kazdym)? na razie robie to tak:
>>  for i in 0..lst.size - 1
>>     for j in i + 1..lst.size - 1
>>         do_something(lst [i], lst [j])
>>     end
>> end
>>  ale to wyglada dosc malo rubistycznie. jakies pomysly?
>
> class Array
>
>      def each_pair
>          self.each_index do |i|
>              (i+1).upto(self.size-1) do |j|
>                  yield self[i],self[j]
>              end
>          end
>      end
>
> end
>
> lst = *(1..10)
>
> lst.each_pair do |a,b|
>      puts "#{a} #{b}"
> end

sweet. uzyles conajmniej 3 idiomow Ruby'ego (rozszerzanie klasy  
standardowej, metoda upto na liczbie, closure). po prostu piekne. jestem  
pod wrazeniem (-:

pzdr
	szeryf
Re: iteracja po tablicy kazdy z kazdym "ruby-way"
#215
Author: Marcin Mielżyński
Date: Mon, 02 Oct 2006 20:51
34 lines
1304 bytes

można jeszcze:


class Array

     def each_pair
         each_with_index do |a,i|
              i.next.upto(size-1) do |j|
                  yield a,self[j]
              end
         end
     end

end


i mniej wydajna

class Array

     def each_pair
         each_with_index do |a,i|
             self[i.next..-1].each do |b|
                 yield a,b
             end
         end
     end

end


lopex
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads