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);
  • a = উত্স অ্যারে
  • 1 = উত্স অ্যারে সূচক শুরু
  • খ = গন্তব্য অ্যারে
  • 0 = গন্তব্য অ্যারে সূচক শুরু
  • 3 = অনুলিপি করতে উপাদান

7
নাম পাওয়া প্যারামিটারগুলি যা এখন উপলভ্য, আপনার 5 টি প্যারামিটারের কোনও ডকুমেন্ট করার দরকার নেই।
হামিশ গ্রুবিজন

11
@ হামিশ ভাল, সম্ভবত। ব্যক্তিগতভাবে আমি স্পষ্ট নাম যুক্ত করব না যতক্ষণ না কোডটি উল্লেখযোগ্যভাবে পরিষ্কার হয়ে যায় এবং আমি নিশ্চিত নই (এই ক্ষেত্রে) যে প্যারামিটারের নামগুলি তারা নিজেরাই অর্জন করবে।
মার্ক গ্র্যাভেল

19

এই প্রশ্নটি দেখুন । লিনকিউ টেক () এবং স্কিপ () হ'ল সর্বাধিক জনপ্রিয় উত্তর, পাশাপাশি অ্যারে.কপিটিও ()।

একটি কাল্পনিকভাবে দ্রুত এক্সটেনশন পদ্ধতি এখানে বর্ণিত হয়েছে


1
উপযুক্ত উত্তর সহ এসও-তে আর একটি প্রশ্ন: stackoverflow.com/a/3539065/411428
ম্যানফ্রেড

2
নোট করুন যে পারফরম্যান্স-সমালোচনামূলক পরিস্থিতিগুলি মোকাবেলা করার সময় লিনকুই আদর্শ নয়
এক্সডি আমার মুখোমুখি

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);

অ্যারে যেখানে ক্লাস হচ্ছে পদ্ধতি অনুলিপি, যা একটি অ্যারের উপাদান বি অ্যারে অনুলিপি করে।

এক অ্যারে থেকে অন্য অ্যারেতে অনুলিপি করার সময়, আপনি অনুলিপি করছেন এমন অন্য অ্যারেতে আপনাকে একই ডেটা টাইপ সরবরাহ করতে হবে।


1

দ্রষ্টব্য: একটি বিদ্যমান অ্যারেটিকে পুনরায় আকার দেওয়ার উপায়ের উত্তরের একটি পদক্ষেপের সন্ধান করতে আমি এই প্রশ্নটি পেয়েছি ।

সুতরাং আমি ভেবেছিলাম যে আমি এখানে তথ্য যুক্ত করব, যদি অন্য কেউ অ্যারে পুনরায় আকার দেওয়ার প্রশ্নে আংশিক উত্তর হিসাবে রেঞ্জযুক্ত অনুলিপিটি কীভাবে করবেন তা সন্ধান করছে।

অন্য যে কেউ এই প্রশ্নটি সন্ধান করছে আমি একই জিনিসটি খুঁজছি এটি খুব সাধারণ:

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

যেখানে টি টাইপ, যেখানে অ্যারেভেরিয়েবল ঘোষণা করা হয়:

T[] arrayVariable;

এই পদ্ধতিটি নাল চেকগুলি পরিচালনা করে, পাশাপাশি নতুন সাইজ == ওল্ড সাইজটির কোনও প্রভাব নেই, এবং অবশ্যই নিঃশব্দে কেসটি পরিচালনা করে যেখানে অ্যারেগুলির মধ্যে একটি অপরের তুলনায় দীর্ঘ হয়।

আরও জানতে এমএসডিএন নিবন্ধটি দেখুন।


0

যদি আপনি নিজের অ্যারে.কপি পদ্ধতিটি প্রয়োগ করতে চান তবে ।

স্থির পদ্ধতি যা জেনেরিক ধরণের।

 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();
            }
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.