」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何有效率、不重複地隨機選擇數組項?

如何有效率、不重複地隨機選擇數組項?

發佈於2024-11-03
瀏覽:171

How to Efficiently Select Array Items Randomly Without Repetition?

有效地隨機選擇數組項目而不重複

您設計了一個從數組中隨機選擇項目的函數,確保最近的選擇不會重複。雖然目前的解決方案有效,但您擔心其效率以及是否會導致過度循環。讓我們探索一種更有效的方法。

1。遞歸注意事項

是的,您的 ChooseName() 函數可以被視為遞歸函數,因為它會呼叫自身,直到找到唯一的名稱。遞歸對於某些問題可能很有用,但重要的是要注意堆疊的使用和深度過大的可能性。

2。高效率的解決方案

為了解決效率問題,我們可以採取不同的策略。我們可以建立原始陣列的副本並從副本中隨機選擇項目,直到選擇所有項目,而不是依賴遞歸和循環直到找到唯一的名稱。一旦所有項目都用完,我們將副本重置為其原始狀態。

這是此方法的 JavaScript 實作:

function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length  "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.

此方法利用 JavaScript 的陣列 slice() 方法建立原始陣列的淺表副本。然後,它重複地從副本中選擇隨機項目並將其從副本中刪除,從而有效地模仿隨機選擇,而不重複,直到所有項目都用盡為止。一旦選擇了所有項目,副本就會重置,從而可以重新開始隨機選擇。

最新教學 更多>
  • 如何在不支援的瀏覽器中實現“背景濾鏡”效果?
    如何在不支援的瀏覽器中實現“背景濾鏡”效果?
    CSS:為不可用的背景過濾器提供替代方案CSS 中的背景過濾器功能在大多數現代瀏覽器中仍然無法訪問。雖然我們預計其未來的支持,但發現替代解決方案勢在必行。 實現類似效果的一種方法是採用具有微妙透明度的背景。下面的 CSS 程式碼示範了這個方法:/* Slightly transparent fall...
    程式設計 發佈於2024-11-08
  • Python 的 len() 函數對於不同的資料結構有多有效率?
    Python 的 len() 函數對於不同的資料結構有多有效率?
    理解Python內建資料結構中len()函數的成本Python中內建len()函數是決定各種資料結構長度的重要工具。它的效率至關重要,尤其是在處理大型資料集時。本文深入研究了 len() 對於不同內建資料類型(例如列表、元組、字串和字典)的計算成本。 O(1) 跨內建類型的複雜性關鍵要點是 len(...
    程式設計 發佈於2024-11-08
  • 如何在 Python 中存取 Windows 剪貼簿文字?
    如何在 Python 中存取 Windows 剪貼簿文字?
    在 Python 中存取 Windows 剪貼簿文字從 Windows 剪貼簿檢索文字是程式設計中的常見任務。本文探討如何使用 Python 的 win32clipboard 模組來實現此目的。 pywin32 和 win32clipboardwin32clipboard 模組是 pywin32 的...
    程式設計 發佈於2024-11-08
  • 如何修復 CentOS 5 上由於檔案權限問題導致的 Nginx 403 Forbidden 錯誤?
    如何修復 CentOS 5 上由於檔案權限問題導致的 Nginx 403 Forbidden 錯誤?
    Nginx 403 Forbidden:文件存取權限故障排除當在Nginx 中遇到令人沮喪的「403禁止」錯誤時,確定根本原因可以是一個挑戰。此錯誤通常表示對檔案或目錄的存取被拒絕。在該特定場景中,使用者在 CentOS 5 上使用 PHP-FPM 配置了 Nginx,但無法提供指定來源目錄中的任何...
    程式設計 發佈於2024-11-08
  • React 中的函數和類別元件與 TypeScript
    React 中的函數和類別元件與 TypeScript
    在使用 TypeScript 的 React 中,我們可以使用兩種主要方法來建立元件:功能元件和類別元件。兩種方法都允許使用 props 和 state,但使用的範例略有不同。 TypeScript 透過提供靜態類型進一步增強了開發安全性,這使我們能夠精確定義 props 和 state 的形狀。 ...
    程式設計 發佈於2024-11-08
  • 如何使用 Clang 檢查編譯器產生的 C++ 模板實例化程式碼?
    如何使用 Clang 檢查編譯器產生的 C++ 模板實例化程式碼?
    檢查C 語言中編譯器產生的範本實例化在C 語言中,範本函數和類別允許透過定義通用功能來重用程式碼專門針對不同類型。要了解編譯器為模板實例化產生的程式碼,了解這些實例化的函數或類別會很有幫助。 Clang 的AST 列印功能一個工具提供這種可見性的是Clang 的抽象語法樹(AST) 列印功能,Cla...
    程式設計 發佈於2024-11-08
  • 我從使用 Vue.js 建立計算器中學到了什麼
    我從使用 Vue.js 建立計算器中學到了什麼
    對於我的第四個項目,我使用 Vue.js 開發了一個 計算器 應用程式。對於理解如何處理使用者輸入、顯示動態結果以及使用 JavaScript 執行計算來說,這是一次寶貴的經驗。以下是我在建立此應用程式時學到的主要經驗教訓的細分。 1. 處理使用者輸入並更新顯示 計算器需要接受使用...
    程式設計 發佈於2024-11-08
  • 在 Kubernetes 上設定 JFrog Artifactory 並連接 Spring Boot 應用程式
    在 Kubernetes 上設定 JFrog Artifactory 並連接 Spring Boot 應用程式
    本文档提供有关在 Kubernetes 集群中设置 JFrog Artifactory 的指南。它作为开发人员在本地计算机上运行的 Kubernetes 环境上安装和配置 JFrog 的基本教程。 设置本地环境来构建DevOps资源 我使用 Docker 容器为多个应用程序设置工作环...
    程式設計 發佈於2024-11-08
  • Angular 與 React:4 中你該選哪一個?
    Angular 與 React:4 中你該選哪一個?
    前端開發者總是面臨一個大問題:Angular 還是 React? 兩個框架都很強大,但哪一個真正適合你的開發需求? ? 在這個全面的比較中,我詳細分析了每個項目的主要差異、優勢和劣勢,幫助您為下一個項目做出正確的選擇。無論您是初學者還是經驗豐富的專業人士,本文都會為您提供做出明智決定所需的見解。...
    程式設計 發佈於2024-11-08
  • 如何將 Props 傳遞給 React Router 中的處理程序元件?
    如何將 Props 傳遞給 React Router 中的處理程序元件?
    使用React Router 將Props 傳遞給處理程序元件在利用React Router 的React.js 應用程式中,您可能會遇到需要將props 傳遞給特定處理程序組件的場景。考慮以下應用程式結構:var Dashboard = require('./Dashboard'); var Co...
    程式設計 發佈於2024-11-08
  • 透過 Maroto 在 Golang 中產生 PDF 來進行長期操作
    透過 Maroto 在 Golang 中產生 PDF 來進行長期操作
    Written by Subha Chanda✏️ Go, also known as Golang, is a statically typed, compiled programming language designed by Google. It combines the performan...
    程式設計 發佈於2024-11-08
  • 作業系統開發(真相)
    作業系統開發(真相)
    Table of Contents Introduction 1. The Bootloader: Kicking Things Off 2. Entering the Kernel: Where the Magic Happens 3. Choosing Your Languag...
    程式設計 發佈於2024-11-08
  • 按值傳遞或引用傳遞:「想要速度?按值傳遞」何時是真的?
    按值傳遞或引用傳遞:「想要速度?按值傳遞」何時是真的?
    “想要速度?按價值傳遞” - 探索性能影響Scott Meyers 的聲明“想要速度?按價值傳遞”提出了問題關於按值傳遞物件與按引用傳遞物件的效能優勢。在這種情況下,按值傳遞涉及複製操作,而按引用傳遞則避免了不必要的複製。 考慮以下結構體 X 和 Y 的例子:struct X { std::st...
    程式設計 發佈於2024-11-08
  • 什麼是打字稿?
    什麼是打字稿?
    TypeScript 是 JavaScript 的超集,為語言添加了可選的靜態類型。它為大型 JavaScript 專案提供了更好的工具、改進的程式碼組織和增強的可擴展性。 TypeScript 程式碼最終被編譯為純 JavaScript,然後可以在任何 JavaScript 執行時間環境中執行。...
    程式設計 發佈於2024-11-08
  • 第一次使用 Git 遠距工作
    第一次使用 Git 遠距工作
    介紹 本週,我加深了對 Git 的理解,特別是使用 Git 遙控器。作為先決條件,在處理遠端時熟悉 Git 合併至關重要。上週,我分享了我第一次使用 Git merge 的經驗並討論了一些最佳實踐。本週,我在開發新功能時應用了這些知識,不是在我自己的儲存庫中,而是在合作者的儲存庫(...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3