在循環內找到它。我已經閱讀了關於拼接的內容,但它讓我更困惑。 我對Perl並不熟悉,但我試圖將算法轉換爲另一種語言。這段Perl代碼是用什麼語言來做的?
my $sill = splice(@list,int(rand(@list)),1);
last unless ($sill);
更具體一點:如果它不從最後一個循環中退出,那麼$ sill裏面會有什麼?
感謝您的幫助!
在循環內找到它。我已經閱讀了關於拼接的內容,但它讓我更困惑。 我對Perl並不熟悉,但我試圖將算法轉換爲另一種語言。這段Perl代碼是用什麼語言來做的?
my $sill = splice(@list,int(rand(@list)),1);
last unless ($sill);
更具體一點:如果它不從最後一個循環中退出,那麼$ sill裏面會有什麼?
感謝您的幫助!
這隨機刪除陣列@list
中的一個元素。該值分配給$sill
。如果這是一個錯誤的值,封閉的循環(未顯示)被打破。
splice
需要一個數組,一個偏移量和一個長度以及一個替換列表。如果替換被省略,則元素被刪除。
長度是恆定的(1個元素),但偏移量計算爲一個在0和長度爲@list
之間的較小的隨機整數。
這意味着:
list
(0 - >號的列表的元素)和pop()
等)sill
可變
sill
變量是假最後一個要點的小修改:如果'sill'爲false,它將退出循環,而不是無效。除了'undef'(void),數字0,字符串'0'和空字符串也是false,並且會導致循環退出。要僅在'$ sill'爲空/'undef'時退出,您可以使用'last,除非定義$ sill'。 – 2013-02-08 14:06:46
相應地編輯了POST – 2013-02-08 14:09:11
so $ sill具有已刪除項目的值?有點像一個堆棧的工作原理,但它會隨機彈出? – user2054454 2013-02-08 13:25:35
@ user2054454是的,確切地說。 (實際上,數據結構是作爲「(雙向)鏈接列表」) – amon 2013-02-08 13:26:28
好吧,謝謝你的快速幫助。 – user2054454 2013-02-08 13:30:03