2010-05-17 14 views
6

सी # - यानी में किसी सरणी की पूंछ प्राप्त करने का सबसे आसान तरीका क्या है। सभी पहले तत्व के रूप में।एक सरणी की पूंछ

+1

वहाँ अपने प्रश्न के कई व्याख्याएं हैं: आप सरणी की एक प्रतिलिपि चाहते हैं तत्वों? क्या आप मूल सरणी पर फिर से शुरू करना चाहते हैं, पहले छोड़ना चाहते हैं? –

उत्तर

13
var myArray = GetSomeArray(); 
myArray = myArray.Skip(1).ToArray(); 

ध्यान दें कि मैं .ToArray बुला से बच जाएंगे() जितना संभव हो उतना और नेट में बजाय IEnumerable<T> उपयोग करने के लिए चिपके रहते हैं।

+3

लेकिन ... यदि आप ऊपर के रूप में ToArray को कॉल करने जा रहे हैं, तो शायद यह ऐरे का उपयोग करने के लिए अधिक कुशल है। कॉपी क्योंकि मुझे विश्वास नहीं है कि ToArray को लंबाई -1 पर सरणी को प्रारंभ करने के लिए इसके इनपुट के बारे में पर्याप्त जानकारी होगी। – Josh

+1

@ जोश: यह सच है (मुझे लगता है कि 'ToArray' आंतरिक रूप से' सूची 'का निर्माण करके और * उस * पर' ToArray' को कॉल करके) काम करेगा, लेकिन यह बेहतर होगा कि आप 'ToArray' को बिल्कुल भी कॉल न करें, अगर आप करने की ज़रूरत नहीं थी –

6

Array.Copy:

var array1 = new int[] { 1, 2, 3, 4, 5, 6 }; 

var array2 = new int[array1.Length - 1]; 
Array.Copy(array1, 1, array2, 0, array2.Length); 

// array2 now contains {2, 3, 4, 5, 6} 

संपादित: क्योंकि यह मतलब है कि आप सरणियों का उपयोग पूरी तरह से बच सकते हैं जोएल Coehoorn का जवाब, बेहतर है!

1

लॉल मुझे पुराने स्कूल कहते हैं, लेकिन हे वैध है!

for(int i = 1; i<array.length;i++) 
{ 
    array2[i-1]=array[i]; 
} 

: पी

या आप उन्हें उत्पन्न हो सकते हैं अगर वे एक विधि में थे और आप सिर्फ उन्हें कॉल करने के लिए की जरूरत है, यह सिर्फ तुम क्या पूंछ के साथ क्या करना चाहते हैं पर निर्भर करते हैं।

for(int i = 1; i<array.length;i++) 
{ 
    yield return array[i]; 
} 
0

मैं codeka के जवाब पसंद करते हैं, क्योंकि यह बहुत स्पष्ट काम करने के लिए सबसे कारगर तरीका है, और शायद। हालांकि, जैसा कि आप देख सकते हैं, जब आपको इसकी आवश्यकता होती है तो इसे लागू करने के लिए सबसे आसान नहीं है।

मुझे एक विस्तार विधि के रूप में बहुत कुछ मिल गया है, इसलिए आप SubArray को कॉल कर सकते हैं, और यह एक स्ट्रिंग पर सबस्ट्रिंग की तरह व्यवहार करेगा।

कुछ की तरह:

public static T[] SubArray<T>(this T[] array, int startIndex, int length) 
{ 
    // various null, empty, out of range checks here 

    T[] returnArray = new T[length]; 
    Array.Copy(array, startIndex, returnArray, 0, length); 
    return returnArray; 
} 

var array1 = new[] { 1, 2, 3, 4, 5 }; 
var arrays2 = array1.SubArray(2, 3); 

आप इस तरह के रूप में कुछ अन्य भार के, को लागू कर सकते हैं:

public static T[] SubArray<T>(this T[] array, int startIndex) 
{ 
    // null check here 

    return SubArray(array, startIndex, array.Length - startIndex); 
} 
-1
using System.Linq; 

var array = new [] { 1, 2, 3, 4 }; 
var tail = array.Reverse().Take (array.Length - 1).Reverse(); 
संबंधित मुद्दे