2013-02-08 79 views
2

在循環內找到它。我已經閱讀了關於拼接的內容,但它讓我更困惑。 我對Perl並不熟悉,但我試圖將算法轉換爲另一種語言。這段Perl代碼是用什麼語言來做的?

my $sill = splice(@list,int(rand(@list)),1); 
     last unless ($sill); 

更具體一點:如果它不從最後一個循環中退出,那麼$ sill裏面會有什麼?

感謝您的幫助!

回答

4

這隨機刪除陣列@list中的一個元素。該值分配給$sill。如果這是一個錯誤的值,封閉的循環(未顯示)被打破。

splice需要一個數組,一個偏移量和一個長度以及一個替換列表。如果替換被省略,則元素被刪除。

長度是恆定的(1個元素),但偏移量計算爲一個在0和長度爲@list之間的較小的隨機整數。

+0

so $ sill具有已刪除項目的值?有點像一個堆棧的工作原理,但它會隨機彈出? – user2054454 2013-02-08 13:25:35

+0

@ user2054454是的,確切地說。 (實際上,數據結構是作爲「(雙向)鏈接列表」) – amon 2013-02-08 13:26:28

+0

好吧,謝謝你的快速幫助。 – user2054454 2013-02-08 13:30:03

2

這意味着:

  • 從數組中刪除一個隨機元素list(0 - >號的列表的元素)和
  • 與被刪除的元素(pop()等)
  • 分配 sill可變
  • 退出循環,如果sill變量是假

http://perldoc.perl.org/functions/splice.html

+0

最後一個要點的小修改:如果'sill'爲false,它將退出循環,而不是無效。除了'undef'(void),數字0,字符串'0'和空字符串也是false,並且會導致循環退出。要僅在'$ sill'爲空/'undef'時退出,您可以使用'last,除非定義$ sill'。 – 2013-02-08 14:06:46

+1

相應地編輯了POST – 2013-02-08 14:09:11