Go資料結構:集合

分析和實現Go語言中的集合資料結構 集合是一組值的集合。您可以對這些值進行迭代,添加新值,刪除值並清除集合,獲取集合大小,以及檢查集合是否包含某個項目。集合中的值可能只會被存儲一次,不允許重複。 第一個實現 這是一個簡單的集合實現,尚未具備並發安全性,為了簡潔和易於理解,並沒有鎖定資源。稍後在本文中將添加鎖定。 請注意第二行,它允許我們通過生成此通用資料結構的特定實現來使用任何類型的集合。 set.go // 包set為Item類型創建ItemSet資料結構 package set import "github.com/cheekybits/genny/generic" // Item 集合的類型 type Item generic.Type // ItemSet 集合項目的集合 type ItemSet struct { items map[Item]bool } // Add 向集合中添加新元素。返回集合的指針。 func (s *ItemSet) Add(t Item) *ItemSet { if s.items == nil { s.items = make(map[Item]bool) } _, ok := s.items[t] if !ok { s.items[t] = true } return s } // Clear 從集合中刪除所有元素 func (s *ItemSet) Clear() { s.items = make(map[Item]bool) } // Delete 從集合中刪除項目並返回有無(項目) func (s *ItemSet) Delete(item Item) bool { _, ok := s....

how-to-list-object-methods-javascript

#如何列出JavaScript物件的所有方法 找出如何獲取包含JavaScript物件方法的陣列 我們可以使用 ‘Object.getOwnPropertyNames()’ 函數來獲取與物件相關聯的所有屬性名稱。 然後,我們可以過濾結果陣列,只包括那些屬性名稱是函數的。 我們可以通過使用typeof來判斷它是否為一個函數。 例如,以下是我們可能創建的實用程式函數: getMethods = (obj) => Object.getOwnPropertyNames(obj).filter(item => typeof obj[item] === 'function') 這只列出在特定物件上定義的方法,而不是在其原型鏈中定義的任何方法。 要做到這一點,我們必須採取稍微不同的路線。我們必須首先迭代原型鏈並將所有屬性列在一個陣列中。然後,我們檢查每個單個屬性是否為函數。 為了確保在瀏覽原型鏈時不重複方法(例如始終存在的 constructor ),我們使用了一個Set數據結構,它確保值是唯一的: const getMethods = (obj) => { let properties = new Set() let currentObj = obj do { Object.getOwnPropertyNames(currentObj).map(item => properties.add(item)) } while ((currentObj = Object.getPrototypeOf(currentObj))) return [...properties.keys()].filter(item => typeof obj[item] === 'function') } 使用示例: getMethods("") getMethods(new String('test')) getMethods({}) getMethods(Date.prototype)

在JavaScript中生成隨機而唯一的字符串

在構建我的在線課程平台時,我遇到了生成數千個唯一URL的問題。 每個參與課程的人都會被分配一個唯一的URL。後端知道所有這些URL並將有效的URL映射到課程內容上。 我希望有一個唯一的URL,因為我可以將URL關聯到購買郵件。 這樣,我就可以避免使用登錄功能,同時讓每個人都有一個單獨的URL,以便在URL意外或故意被公開分享時,我可以阻止濫用。 於是我開始寫我的Node.js腳本。 我使用了randomstring這個包,並將數字添加到Set對象中,直到我得到想要的數量。使用Set意味著每個字符串都是唯一的,因為調用add並傳遞重複的字符串不會產生任何效果。 我創建了一個名為generateStrings()的函數來返回這個Set: const generateStrings = (numberOfStrings, stringLength) => { const randomstring = require('randomstring') const s = new Set() while (s.size < numberOfStrings) { s.add(randomstring.generate(stringLength)) } return s } 可以這樣調用它: const strings = generateStrings(100, 20) 其中100是我想要的字符串數量,20是每個字符串的長度。 一旦我們獲得了這個Set,我們可以使用values()Set方法來遍歷它們: for (const value of strings.values()) { console.log(value) }

如何從 JavaScript 陣列中獲取一組物件的唯一屬性

給定一個物件陣列,如果你想要獲取屬性的值,但不包含重複的值,你可以這樣做。 假設你有一個 bills 陣列,內容如下: const bills = [ { date: '2018-01-20', amount: '220', category: 'Electricity' }, { date: '2018-01-20', amount: '20', category: 'Gas' }, { date: '2018-02-20', amount: '120', category: 'Electricity' } ] 並且你想要提取該陣列中每個項目的 category 屬性的唯一值。 以下是你可以執行的操作: const categories = [...new Set(bills.map(bill => bill.category))] 解釋 Set 是 JavaScript 在 ES6 中新增的一種資料結構,它是一個包含唯一值的集合。我們將使用 map() 獲取的屬性值列表放入其中,這將返回以下陣列: ['Electricity', 'Gas', 'Electricity'] 通過 Set,我們將刪除重複的值。 ... 是 展開運算子,將展開 Set 中的值到一個陣列中。