Thread View: pl.comp.lang.ruby
15 messages
15 total messages
Started by Bronisław Tatul
Wed, 18 Feb 2009 07:13
rozrzucić
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 07:13
Date: Wed, 18 Feb 2009 07:13
2 lines
949 bytes
949 bytes
Mam pytanie. Jak rozrzucic losowo elementy w tablicy. Chodzi mi o coś odwrotnego do sortowania.
Re: rozrzucić
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 11:22
Date: Wed, 18 Feb 2009 11:22
17 lines
1161 bytes
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ć
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 13:38
Date: Wed, 18 Feb 2009 13:38
19 lines
1393 bytes
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ć
Author: Daniel Podlejski
Date: Wed, 18 Feb 2009 14:17
Date: Wed, 18 Feb 2009 14:17
15 lines
1213 bytes
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ć
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 14:42
Date: Wed, 18 Feb 2009 14:42
14 lines
1448 bytes
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ć
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 14:55
Date: Wed, 18 Feb 2009 14:55
44 lines
2493 bytes
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ć
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 15:00
Date: Wed, 18 Feb 2009 15:00
24 lines
1838 bytes
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ć
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 15:18
Date: Wed, 18 Feb 2009 15:18
26 lines
2191 bytes
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ć
Author: Bronisław Tatul
Date: Wed, 18 Feb 2009 16:00
Date: Wed, 18 Feb 2009 16:00
27 lines
1978 bytes
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ć
Author: Przemysław Kowalczyk
Date: Wed, 18 Feb 2009 18:10
Date: Wed, 18 Feb 2009 18:10
20 lines
1347 bytes
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ć
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 18:56
Date: Wed, 18 Feb 2009 18:56
27 lines
1863 bytes
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ć
Author: Przemysław Kowalczyk
Date: Wed, 18 Feb 2009 19:54
Date: Wed, 18 Feb 2009 19:54
30 lines
2256 bytes
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ć
Author: Radosław Bułat
Date: Wed, 18 Feb 2009 20:50
Date: Wed, 18 Feb 2009 20:50
24 lines
1750 bytes
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ć
Author: Przemysław Kowalczyk
Date: Wed, 18 Feb 2009 22:05
Date: Wed, 18 Feb 2009 22:05
15 lines
1464 bytes
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ć
Author: Radosław Bułat
Date: Sat, 21 Feb 2009 14:23
Date: Sat, 21 Feb 2009 14:23
19 lines
1443 bytes
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