![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 1 Dołączył: 14.06.2007 Skąd: Chesterfield UK Ostrzeżenie: (0%) ![]() ![]() |
...gdy 00:00 juz dawno temu minelo, mysli zamiast prowadzic do klarownych rozwiazan slimacza sie we wszystkich kierunkach lepiac sie do siebie nawzajem i nawet budowanie foreacha wymaga zebrania sie w sobie i skupienia uwagi?
... termin oddania projektu za kilka godzin - w poniedzialek rano (IMG:style_emoticons/default/wink.gif) - szczesliwie calosc na finishu, ostatnie kody w phpie, potem jeszcze animowany slider z karuzelka w jquery i calosc bedzie smigac jak ta lala (IMG:style_emoticons/default/biggrin.gif) - tylko czemu koncowki projektow z krotkimi terminami sa zawsze takie ciezkie? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@Mike: Potrzebowałem losowych X liczb z zakresu 1 do X. Używałbym rand lub mt_rand, gdyby nie fakt, że nie mogą się powtarzać. Zobacz więc co robię z place i powiedz czy da się prościej. Biorę tworzę tablicę jako zakres liczb od 1 do X. Teraz losuję bez powtórzeń (range) i muszę wybrać X losowych spośród nich, więc rusza array_rand. Ale on zwraca klucz lub klucze. Na dodatek jeśli to jeden klucz to zwraca go jako typ jakiego jest ów element, więc wymusza na mnie w foreach rzutowanie na array. A skoro losuje klucze to muszę wartości zamienić z kluczami i stąd array_flip. Tylko tak mam pewność, że wybierze zawsze z zakresu bez powtórzeń. Nie ma wbudowanej funkcji w php, która by losowała X liczb z zakresu zadanego bez powtórzeń. Tego raczej nie da się już prościej zapisać, bo inne metody będą bazować na tym, że losujemy w pętli tak długo, aż nie wylosujemy X i w razie trafienia tej samej, nie branie tego przebiegu pod uwagę. Innymi słowy zamiast jakiejś mogacej się wykonywać długo pętli w stylu
zrobiłem jednolinijkowca Nie sprawdzałem wydajności, gdyż każdy z nich ma swoje wady i zalety a zastosowanie jest zalezne od sytuacji. Ale ten zapis drugi, choć bardziej zawiły dla laika, na pewno ma ten plus, iż nie ma pustych przebiegów, nawet w przypadku gdy losowanie odbywa się przy liczbie losowanych bliskiej ilości liczb w zakresie. A to jest główna wada pętli, ktora zapewne nieraz wtedy trafi wielokrotnie w tę samą liczbę. @Mike: Tak, wiem, że pierwszy przykład to nie jedyny z możliwych innych, bo tych można napisać jeszcze wiele bazując na shuffle i array_slice czy shuffle i array_pop dla przykładu (bliższe już wtedy 2 wariantowi). Ale najczęstsze implementacje są jednak bardzo podobne do tego pierwszego własnie. Nie jest to optymalne zawsze, podobnie jak moje w pewnych przypadkach, ale kwestia zawsze jest tego gdzie i jak często stosujemy. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 11:26 |