आप System.Collections में वर्ग ढेर उपयोग कर सकते हैं के रूप में आप कतार और दूसरों का उपयोग कर सकते हैं। दस्तावेज़ीकरण के लिए बस vb.net ढेर के लिए खोजें। मैंने सभी विधियों का प्रयास नहीं किया है (उदाहरण के लिए Getenumerator - मुझे नहीं पता कि वीएबी में संभवतः, अगर पुनरावर्तक का उपयोग कैसे करें)। एक ढेर या कतार का उपयोग करके आपको कुछ अच्छे लाभ मिलते हैं, आमतौर पर वीबीए में इतना आसान नहीं होता है। आप
anArray = myStack.ToArray
भले ही स्टैक खाली हो (आकार 0 से -1 की सरणी देता है) का उपयोग कर सकते हैं।
कस्टम संग्रह ऑब्जेक्ट का उपयोग करके, यह इसकी सादगी के कारण बहुत तेज़ काम करता है और आसानी से फिर से लिखा जा सकता है (उदाहरण के लिए केवल दृढ़ता से टाइप किए गए varibles को संभालने के लिए)। आप खाली ढेर के लिए एक चेक बनाना चाहते हो सकता है। यदि आप खाली स्टैक पर पॉप का उपयोग करने का प्रयास करते हैं, तो वीबीए सभी नल-ऑब्जेक्ट्स के रूप में इसे गहन रूप से संभाल नहीं पाएगा।मैंने पाया इसे और अधिक उचित उपयोग करने के लिए:
If myStack.Count > 0 Then
समारोह से ढेर का उपयोग कर, बजाय clsStack.Pop में पाक की। यदि आप इसे कक्षा में सेंकते हैं, तो पॉप पर कॉल चुने गए प्रकार का मूल्य वापस कर सकता है - बेशक आप खाली मूल्यों को संभालने के लिए इसका उपयोग कर सकते हैं, लेकिन आपको इस तरह से अधिक दुःख मिलता है।
उपयोग का एक उदाहरण:
Private Sub TestStack()
Dim i as long
Dim myStack as clsStack
Set myStack = New clsStack
For i = 1 to 2
myStack.Push i
Next
For i = 1 to 3
If myStack.Count > 0 Then
Debug.Print myStack.Pop
Else
Debug.Print "Stack is empty"
End If
Next
Set myStack = Nothing
End Sub
एक LIFO-ढेर का उपयोग करना अत्यंत उपयोगी हो सकता है!
कक्षा clsStack
Dim pStack as Object
Private Sub Class_Initialize()
set pStack = CreateObject("System.Collections.Stack")
End Sub
Public Function Push(Value as Variant)
pStack.Push Value
End Function
Public Function Pop() As Variant
Pop = pStack.Pop
End Function
Public Function Count() as long
Count = pstack.Count
End Function
Public Function ToArray() As Variant()
ToArray = pStack.ToArray()
End Function
Public Function GetHashCode() As Integer
GetHashCode = pStack.GetHashCode
End Function
Public Function Clear()
pStack.Clear
End Function
Private Sub Class_terminate()
If (Not pStack Is Nothing) Then
pStack.Clear
End If
Set pStack = Nothing
End Sub
स्रोत
2016-06-08 13:45:17
पर एक नज़र डालेंगे stackoverflow में आपका स्वागत है! कुछ कोड प्रदान करने के लिए +1 और दिखा रहा है कि यह कितना आसान हो सकता है। कुछ चेतावनी: 1) परेशान वीबीए 'सेट' सिंटैक्स की वजह से ऑब्जेक्ट्स शामिल होने पर आपके 'पुश' और 'पॉप' रूटीन में मान वापस करने के लिए '=' का उपयोग करना विफल हो जाएगा। इस उत्तर का अंत देखें: http://stackoverflow.com/questions/4716382/excel-select-case/4719706#4719706 2) ध्यान रखें कि संग्रह में अनुक्रमण करना समय के लिए ओ (एन) है। Http://stackoverflow.com/questions/4827963/what-is-the-difference-between-the-time-complexity-of-these-two-ways-of-using-loo/4830157#4830157 देखें – jtolle