2012-10-12 7 views
7

पावरहेल में आप गतिशील-लंबाई सरणी (ArrayLists/सूचियों) के साथ कैसे काम करते हैं? मैं मूल रूप से एक 2 डी-सरणी चाहता हूं जहां बाहरीतम सूचकांक की लंबाई अज्ञात है।मैं पावरहेल में अनजान लंबाई की एक सरणी कैसे बना सकता हूं?

मैंने $array = @() के साथ एक सरणी शुरू करने का प्रयास किया, लेकिन इसमें कुछ भी संबोधित करते समय सीमा अपवादों से सूचकांक प्राप्त होगा। तब मैंने + = ऑपरेंड का उपयोग करने की कोशिश की, जैसा कि मैंने एक लेख में पढ़ा है, लेकिन इसके परिणामस्वरूप स्ट्रिंग कॉन्सटेनेशन और तत्व अतिरिक्त नहीं होगा।

उदाहरण:

$array = @() 
$array += @("Elem1x", "Elem1y") 
$array += @("Elem2x", "Elem2y") 
Echo $array[0][0] 

आउटपुट: के बजाय "Elem1x" "ई";

उत्तर

8

इस तरह का प्रयास करें:

$array = @() 
$array += ,@("Elem1x", "Elem1y") 
$array += ,@("Elem2x", "Elem2y") 
$array[0][0] 
+0

मेरा जवाब संपादित किया है क्योंकि मैं एक बड़ी त्रुटि में था! –

+0

कोई भी बता सकता है कि वास्तव में अल्पविराम क्या करता है? – Nilzor

+0

@ नीलोजर यहां पढ़ें: http://blogs.msdn.com/b/powershell/archive/2007/01/23/array-literals-in-powershell.aspx –

9

ईसाई के जवाब जाने के लिए PowerShell तरीका है और ज्यादातर मामलों (मध्यम आकार सरणियों के लिए छोटे) के लिए महान काम करता है। यदि आपकी सरणी बड़ी है तो आप प्रदर्शन कारणों से ArrayList का उपयोग करने पर विचार करना चाहेंगे। यही है, हर बार जब आप किसी सरणी के साथ += का उपयोग करते हैं, तो PowerShell को एक नई सरणी बनाना होगा और पुरानी सामग्री को नई सरणी में कॉपी करना होगा और नई सरणी को चर के लिए असाइन करना होगा। ऐसा इसलिए है क्योंकि .NET arrays निश्चित आकार हैं। आप इसे इस तरह एक ArrayList का उपयोग कर सकते हैं:

$list = new-object system.collections.arraylist 
$list.Add(("Elem1x", "Elem1y", "Elem1z")) > $null 
$list.Add(("Elem2x", "Elem2y")) > $null 
$list[0][0] 

BTW क्या ऑपरेटर += करता ऑपरेटर के बाएं हाथ की ओर वस्तु के प्रकार पर निर्भर करता है। यदि यह एक स्ट्रिंग है, तो आपको स्ट्रिंग कॉन्सटेनेशन मिलता है। यदि ऑब्जेक्ट एक सरणी है, तो दाएं हाथ की ओर सरणी में संलग्न है (नई सरणी/प्रतिलिपि बनाकर)।

+1

मैं इसे अपने अनुभव में भी जोड़ दूंगा, एक बहु आयामी सरणी लगभग कुछ अन्य डेटा संरचना से कम होती है जैसे कि यहां सरणी की सरणीसूची का सुझाव दिया गया है। लेकिन मैं बहु आयामी सरणी के खिलाफ सिर्फ पूर्वाग्रह हो सकता है :) – EBGreen

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