🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
15 messages
15 total messages Started by Bronisław Tatul Wed, 18 Feb 2009 07:13
rozrzucić
#1208
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 07:13
2 lines
949 bytes
Mam pytanie. Jak rozrzucic losowo elementy w tablicy. Chodzi mi o coś
odwrotnego do sortowania.
Re: rozrzucić
#1209
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 11:22
17 lines
1161 bytes
Od Bronisław Tatul pisze:
> Mam pytanie. Jak rozrzucic losowo elementy w tablicy. Chodzi mi o coś
> odwrotnego do sortowania.

Od wersji 1.8.7:

arr = (1..10).to_a
arr.shuffle!

Wcześniej:

arr = (1..10).to_a
arr = arr.sort_by { rand }

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
Re: rozrzucić
#1210
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 13:38
19 lines
1393 bytes
Radosław Bułat pisze:
> Od Bronisław Tatul pisze:
>> Mam pytanie. Jak rozrzucic losowo elementy w tablicy. 
[....]
> arr = (1..10).to_a
> arr.shuffle!

ten wykrzyknik coś daje?

> Wcześniej:
> 
> arr = (1..10).to_a
> arr = arr.sort_by { rand }


Bardzo dziękuję.

Ciekawe czy jest coś takiego jak receptury dla ruby.
No to chyba jednak nastepny kawałek bedę juz pisał w ruby ;-)
Re: rozrzucić
#1211
Author: Daniel Podlejski
Date: Wed, 18 Feb 2009 14:17
15 lines
1213 bytes
Bronisław Tatul napisał:

> > arr = (1..10).to_a
> > arr.shuffle!
> 
>  ten wykrzyknik coś daje?

Tak, ten wykrzyknik coś daje, ten wykrzyknik jest częścią
nazwy metody i ma swoje znaczenie.

Jakie? To sobie doczytaj w jakiejś książce z podstawami
języka, bo wstyd o takie rzeczy pytać.

-- 
Daniel Podlejski
Re: rozrzucić
#1212
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 14:42
14 lines
1448 bytes
Daniel Podlejski pisze:
> Bronisław Tatul napisał:
> 
>>> arr = (1..10).to_a
>>> arr.shuffle!
>>  ten wykrzyknik coś daje?
> 
> Tak, ten wykrzyknik coś daje, ten wykrzyknik jest częścią
> nazwy metody i ma swoje znaczenie.
> 
> Jakie? To sobie doczytaj w jakiejś książce z podstawami
> języka, bo wstyd o takie rzeczy pytać.

A więc i tu zdarzają się trolle. Mówi się trudno.
Re: rozrzucić
#1215
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 14:55
44 lines
2493 bytes
Bronisław Tatul pisze:
>> arr = (1..10).to_a
>> arr.shuffle!
> 
> ten wykrzyknik coś daje?

Ruby pozwala na dołączenie do nazwy metody, na końcu znaku '?' lub '!'. 
'?' wykorzystuje się do metod predykatów, np. zamiast nazywać metody 
'is_red', 'is_awesome' wskazane (ale nie ma przymusu) jest napisać 
'red?', 'awesome?'.

Dla wykrzyknika natomiast przyjęło się, że używa się go dla metod 
'niebezpiecznych'. Najczęściej chodzi o metody, które zmieniają stan 
obiektu lub robią coś bardziej niebezpiecznego niż odpowiednia metoda 
bez wykrzyknika. Zwracam jednak uwagę na to, że bardzo często 
programiści źle interpretują tą regułę, tj. zapominają o części "niż 
odpowiednia metoda bez wykrzyknika". Umieszczanie samej metody z 
wykrzyknikiem bez wersji jego pozbawionej nie ma sensu. Inaczej 
kończylibyśmy na prawie samych metodach z wykrzyknikiem.

Taki życiowy przykład z rails. ActiveRecord posiada 2 wersje metody 
zapisującej: save i save!. Ta pierwsza zwraca true/false w zależności do 
tego czy zapis się powiódł. Ta druga rzuca wyjątkiem w przypadku 
niepowodzenia.

I jeszcze dla jasności: dla rubiego to bez znaczenia czy Twoja metoda 
zawiera '?' czy '!' lub żaden z nich. To informacja dla programisty.

> 
>> Wcześniej:
>>
>> arr = (1..10).to_a
>> arr = arr.sort_by { rand }
> 
> 
> Bardzo dziękuję.
> 
> Ciekawe czy jest coś takiego jak receptury dla ruby.

http://pleac.sourceforge.net/pleac_ruby/

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
Re: rozrzucić
#1213
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 15:00
24 lines
1838 bytes
Bronisław Tatul pisze:
> Daniel Podlejski pisze:
>> Bronisław Tatul napisał:
>>
>>>> arr = (1..10).to_a
>>>> arr.shuffle!
>>>  ten wykrzyknik coś daje?
>> Tak, ten wykrzyknik coś daje, ten wykrzyknik jest częścią
>> nazwy metody i ma swoje znaczenie.
>>
>> Jakie? To sobie doczytaj w jakiejś książce z podstawami
>> języka, bo wstyd o takie rzeczy pytać.
> 
> A więc i tu zdarzają się trolle. Mówi się trudno.

Dlaczego tak uważasz? Akurat ma sporo racji. Jakby nie było pytasz o 
podstawy języka (podobnie zresztą było na kanale #ruby.pl ;-)). IMHO 
grupy są przede wszystkim do pytań typu "czy lepiej jest użyć biblioteką 
A niż B", bo na te pytanie nie da się znaleźć szybko odpowiedzi (ważne 
jest doświadczenie itp).

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
[OT] Re: rozrzucić
#1214
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 15:18
26 lines
2191 bytes
Radosław Bułat pisze:
> Bronisław Tatul pisze:
>> Daniel Podlejski pisze:
>>> Bronisław Tatul napisał:
>>>
>>>>> arr = (1..10).to_a
>>>>> arr.shuffle!
>>>>  ten wykrzyknik coś daje?
>>> Tak, ten wykrzyknik coś daje, ten wykrzyknik jest częścią
>>> nazwy metody i ma swoje znaczenie.
>>>
>>> Jakie? To sobie doczytaj w jakiejś książce z podstawami
>>> języka, bo wstyd o takie rzeczy pytać.
>>
>> A więc i tu zdarzają się trolle. Mówi się trudno.
> 
> Dlaczego tak uważasz? Akurat ma sporo racji. Jakby nie było pytasz o
> podstawy języka (podobnie zresztą było na kanale #ruby.pl ;-)). IMHO
> grupy są przede wszystkim do pytań typu "czy lepiej jest użyć biblioteką
> A niż B", bo na te pytanie nie da się znaleźć szybko odpowiedzi (ważne
> jest doświadczenie itp).

Jego wypowiedź nie niesie żadnej informacji, za to jest personalnie
nieobojetna. A taka właśnie jest definicja trolowania. Zapuścić wątek w
którym zbesztasz interlokutora, albo wywołasz flejma i sam nic nie
argumentujesz. Typowy troll-ing.
Re: rozrzucić
#1217
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 16:00
27 lines
1978 bytes
Radosław Bułat pisze:
> Bronisław Tatul pisze:
>>> arr = (1..10).to_a
>>> arr.shuffle!
>>
>> ten wykrzyknik coś daje?
> 
> Ruby pozwala na dołączenie do nazwy metody, na końcu znaku '?' lub '!'.
> '?' wykorzystuje się do metod predykatów, np. zamiast nazywać metody
> 'is_red', 'is_awesome' wskazane (ale nie ma przymusu) jest napisać
> 'red?', 'awesome?'.

[...]
> I jeszcze dla jasności: dla rubiego to bez znaczenia czy Twoja metoda
> zawiera '?' czy '!' lub żaden z nich. To informacja dla programisty.

Czyli jest to tylko konwencja. No cóż czytałem troche tutoriali i nawet
ksiązke (ale nie całą ;)
I nie doczytałem, że jest coś takiego. Zawsze to dobrze sie czegos
dowiedziec.

>> Ciekawe czy jest coś takiego jak receptury dla ruby.
> 
> http://pleac.sourceforge.net/pleac_ruby/

Fajna strona. Ni jest to http://helion.pl/ksiazki/perec2.htm ale podoba
mi sie.
Re: rozrzucić
#1218
Author: Przemysław Kowalczyk
Date: Wed, 18 Feb 2009 18:10
20 lines
1347 bytes
On Wed, 18 Feb 2009 12:22:07 +0100, Radosław Bułat <radarrek@poczta.fm>  
wrote:

> Od Bronisław Tatul pisze:
>> Mam pytanie. Jak rozrzucic losowo elementy w tablicy. Chodzi mi o coś
>> odwrotnego do sortowania.
>
> arr = (1..10).to_a
> arr = arr.sort_by { rand }

nigdy tak nie rob, patrz:  
http://szeryf.wordpress.com/2007/06/19/a-simple-shuffle-that-proved-not-so-simple-after-all/

szegolnie ostatni podrozdzial.

pzdr
	szeryf

-- 
Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
Re: rozrzucić
#1219
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 18:56
27 lines
1863 bytes
Przemysław Kowalczyk pisze:
> On Wed, 18 Feb 2009 12:22:07 +0100, Radosław Bułat <radarrek@poczta.fm> 
> wrote:
> 
>> Od Bronisław Tatul pisze:
>>> Mam pytanie. Jak rozrzucic losowo elementy w tablicy. Chodzi mi o coś
>>> odwrotnego do sortowania.
>>
>> arr = (1..10).to_a
>> arr = arr.sort_by { rand }
> 
> nigdy tak nie rob, patrz: 
> http://szeryf.wordpress.com/2007/06/19/a-simple-shuffle-that-proved-not-so-simple-after-all/ 
> 
> 
> szegolnie ostatni podrozdzial.

Przeczytałem nawet całe :). Z początku przestraszyłem się, że palnąłem 
straszną głupotę czy coś. Oczywiście mogłem dodać że moja metoda ma 
złożoność O(N * log(N)), czyli taką jak... sortowania. Myślę, że pisanie 
"nigdy tak nie rób" nie ma sensu, co zresztą wynika z Twoich testów, 
które dopiero od pewnego momentu wykazały większą wydajność innej metody.


-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
Re: rozrzucić
#1220
Author: Przemysław Kowalczyk
Date: Wed, 18 Feb 2009 19:54
30 lines
2256 bytes
On Wed, 18 Feb 2009 19:56:41 +0100, Radosław Bułat <radarrek@poczta.fm>  
wrote:
>>>> Mam pytanie. Jak rozrzucic losowo elementy w tablicy. Chodzi mi o coś
>>>> odwrotnego do sortowania.
>>>
>>> arr = (1..10).to_a
>>> arr = arr.sort_by { rand }
>>  nigdy tak nie rob, patrz:  
>> http://szeryf.wordpress.com/2007/06/19/a-simple-shuffle-that-proved-not-so-simple-after-all/  
>>   szegolnie ostatni podrozdzial.
>
> Przeczytałem nawet całe :). Z początku przestraszyłem się, że palnąłem  
> straszną głupotę czy coś. Oczywiście mogłem dodać że moja metoda ma  
> złożoność O(N * log(N)), czyli taką jak... sortowania. Myślę, że pisanie  
> "nigdy tak nie rób" nie ma sensu, co zresztą wynika z Twoich testów,  
> które dopiero od pewnego momentu wykazały większą wydajność innej metody.

...czyli nie przeczytales calego :) na koncu pisze o najwiekszym problemie  
zwiazanym z ta metoda, czyli o "skrzywieniu" wynikow. po prostu w ten  
sposob nie uzyskasz wszystkich permutacji z jednakowym  
prawdopodobienstwem. a mam wrazenie, ze OP zajmuje sie jakimis  
obliczeniami, wiec moze to byc dla niego istotne.

zobacz tez http://www.codinghorror.com/blog/archives/001015.html jak u  
mnie nie jest wystarczajaco jasno :)

pzdr
	szeryf
-- 
Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
Re: rozrzucić
#1221
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 20:50
24 lines
1750 bytes
Przemysław Kowalczyk pisze:
> ...czyli nie przeczytales calego :)

Przeczytałem :).

 > na koncu pisze o najwiekszym
> problemie zwiazanym z ta metoda, czyli o "skrzywieniu" wynikow. po 
> prostu w ten sposob nie uzyskasz wszystkich permutacji z jednakowym 
> prawdopodobienstwem. a mam wrazenie, ze OP zajmuje sie jakimis 
> obliczeniami, wiec moze to byc dla niego istotne.

Ja tam widzę, że występuje to dla metody sposobu: arr.sort { rand } co 
zresztą jest dosyć logiczne. Natomiast dla tego sposobu co podałem 
rozkład jest dobry.

> 
> zobacz tez http://www.codinghorror.com/blog/archives/001015.html jak u 
> mnie nie jest wystarczajaco jasno :)

Jest jak najbardziej jasno.

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
Re: rozrzucić
#1222
Author: Przemysław Kowalczyk
Date: Wed, 18 Feb 2009 22:05
15 lines
1464 bytes
On Wed, 18 Feb 2009 21:50:01 +0100, Radosław Bułat <radarrek@poczta.fm>  
wrote:
>
> Ja tam widzę, że występuje to dla metody sposobu: arr.sort { rand } co  
> zresztą jest dosyć logiczne. Natomiast dla tego sposobu co podałem  
> rozkład jest dobry.

ooops, rzeczywiscie :) to ja nie przeczytalem dokladnie tego, co  
napisales. nie zauwazylem, ze piszesz o sort_by. przepraszam.

pzdr
	szeryf

-- 
Przemysław ,,Szeryf'' Kowalczyk :: http://szeryf.wordpress.com/
Re: rozrzucić
#1216
Author: Radosław Bułat
Date: Sat, 21 Feb 2009 14:23
19 lines
1443 bytes
Bronisław Tatul pisze:
> Radosław Bułat pisze:
>> Od Bronisław Tatul pisze:
>>> Mam pytanie. Jak rozrzucic losowo elementy w tablicy. 
> [....]
>> arr = (1..10).to_a
>> arr.shuffle!
> 
> ten wykrzyknik coś daje?

Ponieważ właśnie napisałem o tym wpis, zapraszam do czytania:
http://radarek.jogger.pl/2009/02/21/ruby-a-metody-z-i-w-nazwie/

W zasadzie każdego zachęcam do przeczytania bo większość źle 
interpretuje zasadę z '!'.

-- 
Radosław Bułat
http://radarek.jogger.pl - mój blog
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