2010-02-04 16 views
12

Powershell कोड:पावरहेल में किसी सरणी में तत्व को कैसे प्रीपेड करें?

$list += "aa" 

संलग्न कर देता है सूची $ सूची तत्व "आ"। क्या तत्व को प्रीपेड करने का कोई तरीका है? यह मेरा समाधान है, लेकिन एक लाइन में ऐसा करने का एक तरीका होना चाहिए।

$tmp = ,"aa"; 
$tmp += $list 
$list = $tmp 

उत्तर

20

ऊपर अपने उदाहरण में, आप केवल करने के लिए सक्षम होना चाहिए:

$list = ,"aa" + $list 

कि बस अपनी सूची में 'एए' पहले जोड़ें और यह 0 तत्व बनाते हैं। $list[0] प्राप्त करके सत्यापित करें।

+0

तकनीकी रूप से, यह दो सरणी को जोड़ती है। सरणी निश्चित आकार का है इसलिए शुद्ध प्रीपेन्ड संभव नहीं है। –

11

PowerShell में सरणियों पर += और + का प्रयोग हर बार जब आप इसका इस्तेमाल सरणी की एक प्रतिलिपि कर रही है। यह तब तक ठीक है जब तक सूची/सरणी वास्तव में बड़ी नहीं होती है। इस परिदृश्य में जोड़ें/सम्मिलित तरीकों का उपयोग करने की आवश्यकता है

C:\> $list = new-object 'System.Collections.Generic.List[string]' 
C:\> $list.Add('a') 
C:\> $list.Add('b') 
C:\> $list.Insert(0,'aa') 
C:\> $list 
aa 
a 
b 

नोट: उस मामले में, एक सामान्य सूची का उपयोग पर विचार करें। यदि आप += का उपयोग करने के लिए वापस आते हैं, तो यह सामान्य सूची को object[] पर कॉपी करेगा।

+0

नोट, आपकी पहली $ सूची 2 तत्वों की एक सरणी वापस कर देगी। पहला तत्व 'aa' है, और दूसरा तत्व 2 तत्वों की एक नेस्टेड सूची है, 'ए' और 'बी' – Nestor

+0

दोह! ठीक है, उस भाग को हटा दिया। –

2

यह दो सरणी को एक में जोड़ता है।

$list = @("aa") + $list 

यह एक PowerShell सरणी में एक शुद्ध prepending करना है, क्योंकि PowerShell सरणियों लंबाई तय कर रहे हैं असंभव है। एक में दो सरणी का मिश्रण एक अच्छा दृष्टिकोण है।

+0

बहुत बढ़िया धन्यवाद :) –

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