2012-11-10 15 views
11

में सरणियों के लिए तत्वों को जोड़ने के मैं बहुत powershell अनुभव अभी तक नहीं है और अपने आप को पढ़ाने के लिए के रूप में मैं साथकैसे गतिशील रूप से powershell

जाना मैं एक बड़ा परियोजना के लिए अवधारणा कोड के कुछ सबूत बनाने के लिए कोशिश कर रहा हूँ कोशिश कर रहा हूँ , यहां मुख्य लक्ष्य बहुत गतिशील रूप से एक फ़ंक्शन का उपयोग करके सरणी बनाने और तत्व जोड़ने के लिए है।

$testArray = @() 
function addToArray($Item1) 
{ 
    $testArray += $Item1 
    "###" 
} 

$tempArray = "123", "321", "453" 
$foldertest = "testFolder" 

foreach($item in $tempArray) 
{ 
    addToArray $item 
} 
"###" 

हर बार समारोह खत्म सरणी खाली हो जाता है:

यहाँ मेरी कोड है। ध्यान में रखते हुए मेरे अधिकांश प्रोग्रामिंग अनुभव जावा, पीएचपी, कुछ सी और सी ++ से कुछ नाम देने के लिए आता है, अगर मैंने इसे php में किया है (पाठ्यक्रम की भाषा वाक्यविन्यास को समायोजित करना) तो यह ठीक काम करेगा

+1

क्यों इसके बजाय एक सूची का उपयोग नहीं करते? तीर गतिशील रूप से संचालित करने के लिए कभी नहीं थे। हर बार जब आप एक सरणी का आकार बदलते हैं, तो यह हुड के नीचे एक नया बनाता है। तो आप इसके आकार के लिए आनुपातिक ओवरहेड मिलता है। – Neolisk

+0

सलाह neolisk के लिए धन्यवाद, मैंने इसके बारे में सोचा था, मैं इसे एक शॉट दे दूँगा। – icomeinpieces

उत्तर

6
$testArray = [System.Collections.ArrayList]@() 
$tempArray = "123", "321", "453" 

foreach($item in $tempArray) 
{ 
    $arrayID = $testArray.Add($item) 
} 
10

समस्या दायरे में से एक है; आपके addToArray फ़ंक्शन के अंदर इस पंक्ति को बदलें:

$script:testArray += $Item1 

... सरणी चर में स्टोर करने के लिए आप उम्मीद कर रहे हैं।

+2

सहायता के लिए धन्यवाद, यह विधि मेरे लिए काम करती है। – icomeinpieces

+0

वही, धन्यवाद! – JoeRod

+2

ध्यान दें कि इस विधि की कमी यह है कि यह संपूर्ण मौजूदा सरणी की एक इन-मेमोरी प्रतिलिपि बनाता है जिसमें नई वस्तु है। दूसरे शब्दों में, यह ओ (2 एन) स्मृति उपयोग है। यदि आप इसे बहुत या बहुत बड़े सरणी के साथ कर रहे हैं, तो यह बहुत महंगा हो जाता है। एक ArrayList का उपयोग एक ही ऑब्जेक्ट का पुन: उपयोग करता है और आइटम को सीधे इसमें जोड़ता है। –

0

के बजाय फिर से बनाने के लिए प्रत्येक लूप चरण में सरणी (जो मूल रूप से है क्या हर बार जब आप इसे करने के लिए जोड़ हो रहा है), एक चर करने के लिए लूप के परिणाम में निर्दिष्ट करें:

$testArray = foreach($item in $tempArray) 
{ 
    addToArray $item 
} 
+0

सलाह के लिए धन्यवाद मैं अगली बार एक जटिल लिपि बनाने के लिए कोशिश कर सकता हूं – icomeinpieces

संबंधित मुद्दे