किसी सरणी के भाग को C # में दूसरे सरणी में कैसे कॉपी करें?


144

मैं किसी सरणी के एक भाग को दूसरे सरणी में कैसे कॉपी कर सकता हूं?

गौर कीजिए मैं कर रहा हूँ

int[] a = {1,2,3,4,5};

अब अगर मैं एरे के स्टार्ट इंडेक्स और एंड इंडेक्स देता हूं तो aइसे दूसरे ऐरे में कॉपी कर लेना चाहिए।

जैसे अगर मैं स्टार्ट इंडेक्स को 1 और एंड इंडेक्स को 3 के रूप में देता हूं, तो तत्वों 2, 3, 4 को नए एरे में कॉपी करना चाहिए।

जवाबों:


273
int[] b = new int[3];
Array.Copy(a, 1, b, 0, 3);
  • एक = स्रोत सरणी
  • स्रोत सरणी में 1 = प्रारंभ सूचकांक
  • बी = गंतव्य सरणी
  • गंतव्य सरणी में 0 = प्रारंभ अनुक्रमणिका
  • 3 = तत्वों को कॉपी करने के लिए

7
नामांकित मापदंडों के साथ जो अब उपलब्ध हैं, आपको 5 मापदंडों में से किसी को भी दस्तावेज करने की आवश्यकता नहीं होगी।
हामिश ग्रुबीजन

11
@ हमीश अच्छी तरह से, शायद। व्यक्तिगत रूप से मैं स्पष्ट नाम नहीं जोड़ूंगा जब तक कि यह कोड काफी हद तक स्पष्ट नहीं हो जाता है, और मुझे यकीन नहीं है (इस मामले में) कि पैरामीटर नाम खुद से प्राप्त करेंगे।
मार्क Gravell

19

इस प्रश्न को देखें । LINQ Take () और Skip () सबसे लोकप्रिय उत्तर हैं, साथ ही Array.CopyTo () भी हैं।

यहाँ एक स्पष्ट रूप से तेज़ विस्तार विधि का वर्णन किया गया है


1
एक उपयुक्त जवाब के साथ इतने पर एक और सवाल: stackoverflow.com/a/3539065/411428
मैनफ्रेड

2
ध्यान दें कि प्रदर्शन-महत्वपूर्ण परिस्थितियों से निपटने के दौरान LINQ आदर्श नहीं है
मुझे XD का सामना करना पड़ता है

3
int[] a = {1,2,3,4,5};

int [] b= new int[a.length]; //New Array and the size of a which is 4

Array.Copy(a,b,a.length);

जहाँ ऐरे कक्षा विधि विधि कॉपी है, जो किसी सरणी के तत्व को b सरणी में कॉपी करता है।

एक सरणी से दूसरे सरणी में कॉपी करते समय, आपको उसी डेटा प्रकार को दूसरे सरणी में प्रदान करना होगा जिसमें आप कॉपी कर रहे हैं।


1

नोट: मुझे यह प्रश्न उत्तर में एक मौजूदा सरणी का आकार बदलने के चरणों में से एक की तलाश में मिला ।

इसलिए मैंने सोचा कि मैं उस जानकारी को यहाँ जोड़ दूंगा, अगर कोई और व्यक्ति किसी सरणी को आकार देने के प्रश्न के आंशिक उत्तर के रूप में एक रंगी हुई प्रतिलिपि कैसे खोज सकता है।

किसी और को यह प्रश्न ढूंढते हुए कि मैं एक ही चीज़ की तलाश में था, यह बहुत सरल है:

Array.Resize<T>(ref arrayVariable, newSize);

जहाँ T प्रकार है, यानी जहाँ arrayVariable घोषित किया गया है:

T[] arrayVariable;

यह पद्धति अशक्त जांच को संभालती है, साथ ही newSize == oldSize का कोई प्रभाव नहीं पड़ता है, और निश्चित रूप से चुपचाप उस मामले को संभालता है, जिसमें से एक arrays दूसरे की तुलना में लंबा है।

अधिक के लिए MSDN आलेख देखें ।


0

यदि आप अपनी खुद की Array.Copy विधि लागू करना चाहते हैं ।

स्थैतिक विधि जो सामान्य प्रकार की है।

 static void MyCopy<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long destinationIndex, long copyNoOfElements)
 {
  long totaltraversal = sourceIndex + copyNoOfElements;
  long sourceArrayLength = sourceArray.Length;

  //to check all array's length and its indices properties before copying
  CheckBoundaries(sourceArray, sourceIndex, destinationArray, copyNoOfElements, sourceArrayLength);
   for (long i = sourceIndex; i < totaltraversal; i++)
     {
      destinationArray[destinationIndex++] = sourceArray[i]; 
     } 
  }

सीमा विधि कार्यान्वयन।

private static void CheckBoundaries<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long copyNoOfElements, long sourceArrayLength)
        {
            if (sourceIndex >= sourceArray.Length)
            {
                throw new IndexOutOfRangeException();
            }
            if (copyNoOfElements > sourceArrayLength)
            {
                throw new IndexOutOfRangeException();
            }
            if (destinationArray.Length < copyNoOfElements)
            {
                throw new IndexOutOfRangeException();
            }
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.