একটি সি # অ্যারেতে মান যুক্ত করা হচ্ছে


510

সম্ভবত এটি খুব সহজ একটি - আমি সি # দিয়ে শুরু করছি এবং একটি অ্যারেতে মানগুলি যুক্ত করা দরকার, উদাহরণস্বরূপ:

int[] terms;

for(int runs = 0; runs < 400; runs++)
{
    terms[] = runs;
}

যারা পিএইচপি ব্যবহার করেছেন, তাদের জন্য আমি সি # তে যা করার চেষ্টা করছি:

$arr = array();
for ($i = 0; $i < 10; $i++) {
    $arr[] = $i;
}

10
'শর্তাদি [] = মান' হওয়া উচিত নয়; be 'terms [] = রান;'?
tymtam

সি # তে, একবার তৈরি হয়ে গেলে আপনি অ্যারের আকার পরিবর্তন করতে পারবেন না। আপনি যদি অ্যারেগুলির মতো কিছু করতে চান তবে উপাদানগুলি যুক্ত করতে / সরাতে সক্ষম হন তবে তালিকা <int> () ব্যবহার করুন।
কামরান বিগডেলি

উত্তর:


820

আপনি এইভাবে করতে পারেন -

int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

বিকল্পভাবে, আপনি তালিকাগুলি ব্যবহার করতে পারেন - তালিকাগুলির সাথে সুবিধাটি, তালিকাটি ইনস্ট্যান্ট করার সময় আপনাকে অ্যারের আকারটি জানতে হবে না।

List<int> termsList = new List<int>();
for (int runs = 0; runs < 400; runs++)
{
    termsList.Add(value);
}

// You can convert it back to an array if you would like to
int[] terms = termsList.ToArray();

সম্পাদনা করুন: ক) তালিকার লুপের জন্য <T> তালিকায় ফোরচ লুপের চেয়ে 2 গুণ বেশি বেশি সস্তা , খ) অ্যারেতে লুপিং তালিকা <টি>, সি) লুপিংয়ের চেয়ে প্রায় 2 গুণ কম সস্তা ব্যবহার অ্যারের জন্য 5 বার ব্যবহার তালিকা <টি> উপর লুপিং তুলনায় সস্তা foreach (যা আমাদের অধিকাংশ না)।


1
এই পরিস্থিতিতে একটি তালিকা ব্যবহার করে কি সুবিধা?
ফিল হিলি

9
@ ফিলিহলে আপনার তৈরির আগে আপনাকে অ্যারে কত বড় হতে পারে তা "জানতে" হবে না। আপনি দেখতে পাচ্ছেন, এই উদাহরণগুলিতে, ওপিকে "নতুন ইনট [400]" এ একটি মান রাখতে হবে - তবে তালিকার সাথে, তাকে এটি করতে হবে না।
হেজনার

3
কোডের প্রথম বিটটি কোনও কিছুই হবে না কারণ মান কোথাও সংজ্ঞায়িত করা হয়নি। -_-
ইজিবিবি

1
আপনি কেন বলছেন যে এআরএইয়ের একটি আকার হওয়া দরকার ??? শুধু কর new int[]{}!!!!!
টি.ডুডো

6
@ টি.টিডুয়া যদি আপনি প্রস্তাবিত মতো খালি অ্যারে তৈরি করেন এবং মান নির্ধারণের জন্য এটির অস্তিত্বের সূচকগুলি অ্যাক্সেস করার চেষ্টা করেন, আপনি OutOfRangeExceptionকোডটি চালানোর সাথে সাথেই আপনি একটি পেয়ে যাবেন । আপনি যে আকারটি ব্যবহার করতে যাচ্ছেন তার সাথে অ্যারেগুলি শুরু করা দরকার, তারা শুরুতে সমস্ত স্থান সংরক্ষণ করে, ডাইনী তাদের খুব দ্রুত করে তোলে, তবে তাদের পুনরায় আকার দেওয়া সম্ভব নয়।
কিনস্লেয়ারুওয়াই

85

আপনি যদি সি # 3 তে লিখছেন তবে আপনি এটি ওয়ান-লাইনার দিয়ে করতে পারেন:

int[] terms = Enumerable.Range(0, 400).ToArray();

এই কোড স্নিপেট ধরে নেয় যে আপনার ফাইলের শীর্ষে সিস্টেম.লিংকের জন্য একটি ব্যবহার নির্দেশনা রয়েছে।

অন্যদিকে, আপনি যদি এমন কোনও কিছু সন্ধান করছেন যা পরিবর্তনশীল আকার পরিবর্তন করতে পারে, যেমনটি প্রদর্শিত হয় পিএইচপি-র ক্ষেত্রে (আমি বাস্তবে এটি কখনই শিখেছি না), তবে আপনি কোনও int এর পরিবর্তে একটি তালিকা ব্যবহার করতে চাইতে পারেন [] । এখানে কি যে কোডের মত দেখাবে:

List<int> terms = Enumerable.Range(0, 400).ToList();

তবে নোট করুন, তবে আপনি কোনও মানটিতে [400] শর্তাবলী সেট করে কেবল 401 তম উপাদান যুক্ত করতে পারবেন না। পরিবর্তে আপনাকে এইভাবে অ্যাড () কল করতে হবে:

terms.Add(1337);

65

ব্যবহার Linq এর পদ্ধতি CONCAT এই সহজ করে তোলে

int[] array = new int[] { 3, 4 };

array = array.Concat(new int[] { 2 }).ToArray();

ফলাফল 3,4,2


12
পদ্ধতিটি অ্যারেতে 400 আইটেম যুক্ত করে আরও একটি স্পেস সহ অ্যারের অনুলিপি তৈরি করবে এবং সমস্ত উপাদানকে 400 অ্যারে নতুন অ্যারে স্থানান্তরিত করবে। সুতরাং কর্মক্ষমতা অনুযায়ী প্রস্তাবিত হয় না।
কিনস্লেয়ারুওয়াই

39

অ্যারে ব্যবহার করে এটি কীভাবে করা যায় সে সম্পর্কে উত্তরগুলি এখানে সরবরাহ করা হয়েছে।

তবে, সি # এর একটি খুব সহজ জিনিস যা সিস্টেম.কলেশনস নামে পরিচিত :)

সংগ্রহগুলি অ্যারে ব্যবহারের অভিনব বিকল্প, যদিও তাদের মধ্যে অনেকগুলি অভ্যন্তরীণভাবে অ্যারে ব্যবহার করে।

উদাহরণস্বরূপ, সি # এর তালিকা নামে একটি সংগ্রহ রয়েছে যা পিএইচপি অ্যারের সাথে একই রকম কাজ করে।

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

একটি তালিকা উপাদান পুনরুদ্ধার জন্য: int a = list [i];
বেহজাদ

10

মধ্যস্থতাকারী হিসাবে একটি তালিকা ব্যবহার করা সহজ উপায়, অন্যরা যেমন বর্ণনা করেছেন, তবে যেহেতু আপনার ইনপুটটি একটি অ্যারে এবং আপনি কেবল একটি তালিকায় ডেটা রাখতে চান না, তাই আমি ধারণা করি আপনি সম্ভবত কর্মক্ষমতা সম্পর্কে উদ্বিগ্ন।

সর্বাধিক দক্ষ পদ্ধতিটি সম্ভবত একটি নতুন অ্যারে বরাদ্দ করা এবং তারপরে অ্যারে.কপি বা অ্যারে.কপিটো ব্যবহার করে। আপনি যদি তালিকার শেষে একটি আইটেম যুক্ত করতে চান তবে এটি কঠিন নয়:

public static T[] Add<T>(this T[] target, T item)
{
    if (target == null)
    {
        //TODO: Return null or throw ArgumentNullException;
    }
    T[] result = new T[target.Length + 1];
    target.CopyTo(result, 0);
    result[target.Length] = item;
    return result;
}

আমি একটি সন্নিবেশ এক্সটেনশন পদ্ধতির কোডও পোস্ট করতে পারি যা পছন্দসই হলে ইনপুট হিসাবে গন্তব্য সূচী নেয়। এটি কিছুটা জটিল এবং স্থির পদ্ধতি অ্যারে ব্যবহার করে 1-2


2
একটি তালিকা তৈরি করা, এটি পূরণ করা এবং তারপরে এই কপিটি শেষ পর্যন্ত অ্যারে করার জন্য
পারফরম্যান্সের ভিত্তিতে আরও ভাল হবে

10

থ্রাক্সের উত্তরের ভিত্তিতে (উত্তর দেওয়ার মতো পর্যাপ্ত পয়েন্ট আমার কাছে নেই):

public static T[] Add<T>(this T[] target, params T[] items)
    {
        // Validate the parameters
        if (target == null) {
            target = new T[] { };
        }
        if (items== null) {
            items = new T[] { };
        }

        // Join the arrays
        T[] result = new T[target.Length + items.Length];
        target.CopyTo(result, 0);
        items.CopyTo(result, target.Length);
        return result;
    }

এটি অ্যারেতে কেবলমাত্র একাধিক আইটেম যুক্ত করতে বা দুটি অ্যারেতে যোগ দিতে প্যারামিটার হিসাবে একটি অ্যারে পাস করার অনুমতি দেয়।


8

আপনাকে প্রথমে অ্যারে বরাদ্দ করতে হবে:

int [] terms = new int[400]; // allocate an array of 400 ints
for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again
{
    terms[runs] = value;
}

5
int ArraySize = 400;

int[] terms = new int[ArraySize];


for(int runs = 0; runs < ArraySize; runs++)
{

    terms[runs] = runs;

}

এটিই আমি কোড করব be


3

সি # অ্যারেগুলি নির্দিষ্ট দৈর্ঘ্য এবং সর্বদা সূচকযুক্ত। মট্টির সমাধান সহ যান:

int [] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

মনে রাখবেন যে এই অ্যারেটি একটি ঘন অ্যারে, 400 বাইটের একটি সংলগ্ন ব্লক যেখানে আপনি জিনিসগুলি ফেলে দিতে পারেন। আপনি যদি গতিশীল আকারের অ্যারে চান তবে একটি তালিকা <int> ব্যবহার করুন।

List<int> terms = new List<int>();
for(int runs = 0; runs < 400; runs ++)
{
    terms.Add(runs);
}

কোন ইনট [] বা তালিকাগুলি <int> একটি সহযোগী অ্যারে নয় - এটি সি # তে একটি অভিধান <> হবে। অ্যারে এবং তালিকা উভয়ই ঘন।


2
int[] terms = new int[10]; //create 10 empty index in array terms

//fill value = 400 for every index (run) in the array
//terms.Length is the total length of the array, it is equal to 10 in this case 
for (int run = 0; run < terms.Length; run++) 
{
    terms[run] = 400;
}

//print value from each of the index
for (int run = 0; run < terms.Length; run++)
{
    Console.WriteLine("Value in index {0}:\t{1}",run, terms[run]);
}

Console.ReadLine();

/ * আউটপুট:

সূচকের মান 0: 400
সূচকের মূল্য: 400
সূচক 2: 400
সূচক 3: 400
সূচক 4: 400 সূচক 4: 400
সূচক 5: 400
সূচক 6: 400
সূচক 7: 400
মান সূচক 8: 400
সূচকের মান 9: 400
* /


আপনি কি এই সমাধান ব্যাখ্যা করতে পারেন?
ডিপ হিমায়িত

রুন, আমি স্রেফ কোডটির ভিতরে মন্তব্যটি অন্তর্ভুক্ত করেছি> আশা করি এটি আপনার প্রশ্নের উত্তর দিতে পারে।
jyap

2

আপনি সহজেই অ্যারেতে কোনও উপাদান যুক্ত করতে পারবেন না। আপনি উপাদানটি একটি নির্দিষ্ট অবস্থানে পতিত ৮৮৮ হিসাবে চিহ্নিত হিসাবে চিহ্নিত করতে পারেন, তবে আমি এর পরিবর্তে একটি List<int>বা একটি ব্যবহার করার পরামর্শ দিচ্ছি এবং আপনার প্রয়োজন হলে এটি অ্যারেতে রূপান্তর করতে চাই Collection<int>useToArray()


2

আপনার যদি সত্যিই অ্যারের প্রয়োজন হয় তবে নিম্নলিখিতগুলি সম্ভবত সবচেয়ে সহজ:

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

int [] terms = list.ToArray();

2

আমি এটি অন্য রূপের জন্য যুক্ত করব। আমি এই ধরণের কার্যক্ষম কোডিং লাইনগুলিকে বেশি পছন্দ করি।

Enumerable.Range(0, 400).Select(x => x).ToArray();

1

আপনি যদি অ্যারের আকারটি জানেন না বা ইতিমধ্যে কোনও বিদ্যমান অ্যারে রয়েছে যা আপনি যুক্ত করছেন। আপনি এটি দুটি উপায়ে যেতে পারেন। প্রথমটি জেনেরিক ব্যবহার করছে List<T>: এটি করতে আপনি অ্যারে রূপান্তর var termsList = terms.ToList();করতে এবং অ্যাড পদ্ধতিটি ব্যবহার করতে চান । তারপর সম্পন্ন হয়ে গেলে var terms = termsList.ToArray();অ্যারেতে রূপান্তর করতে পদ্ধতিটি ব্যবহার করুন ।

var terms = default(int[]);
var termsList = terms == null ? new List<int>() : terms.ToList();

for(var i = 0; i < 400; i++)
    termsList.Add(i);

terms = termsList.ToArray();

দ্বিতীয় উপায়টি বর্তমান অ্যারেটির আকার পরিবর্তন করছে:

var terms = default(int[]);

for(var i = 0; i < 400; i++)
{
    if(terms == null)
        terms = new int[1];
    else    
        Array.Resize<int>(ref terms, terms.Length + 1);

    terms[terms.Length - 1] = i;
}

আপনি .NET 3.5 ব্যবহার করছেন Array.Add(...);

এই দুটিই আপনাকে এটিকে গতিশীল করার অনুমতি দেবে। আপনি যদি প্রচুর আইটেম যুক্ত করছেন তবে কেবল একটি ব্যবহার করুন List<T>। যদি এটি মাত্র কয়েকটা আইটেম থাকে তবে এটির অ্যারে পুনরায় আকার দেওয়ার আরও ভাল পারফরম্যান্স থাকবে। এটি কারণ আপনি List<T>অবজেক্ট তৈরির জন্য আরও বেশি হিট নেন ।

টাইমস এঁটেল পোকা মধ্যে:

3 আইটেম

অ্যারে পুনরায় আকার দিন: 6

তালিকা যোগ করার সময়: 16

400 আইটেম

অ্যারের পুনরায় আকারের সময়: 305

তালিকা যোগ করার সময়: 20


1

কেবল একটি ভিন্ন পদ্ধতির:

int runs = 0; 
bool batting = true; 
string scorecard;

while (batting = runs < 400)
    scorecard += "!" + runs++;

return scorecard.Split("!");

3
সামান্য উপন্যাসের সময়, এটি প্রচুর স্ট্রিং কনটেনটেশন করছে এবং তারপরে একটি বড় অঙ্কের অপারেশন করছে! এটি সম্পর্কে সবচেয়ে পারফর্ম্যান্ট, বা সহজেই বোঝা / পঠনযোগ্য উপায় নয়।
ব্র্যাডলিডটনেট

@ অলি হুমায়ূন আপনি কি =তুলনা অপারেটরের পরিবর্তে অ্যাসাইনমেন্ট অপারেটরটি ব্যবহার করার সত্যই পরিকল্পনা করেছিলেন ? আপনি যুদ্ধের চলকটি ছেড়ে দিতে পারেন এবং runs < 400লুপটি নিয়ন্ত্রণ করতে ব্যবহার করতে পারেন ।
স্টিভ

কেবল ডাবল প্রবেশকারীদের প্রোগ্রামিং অনুশীলন করুন
আলী হুমায়ূন

1

একটি পদ্ধতির লিনকিউ এর মাধ্যমে একটি অ্যারে পূরণ করা হয়

আপনি যদি একটি উপাদান দিয়ে একটি অ্যারে পূরণ করতে চান তবে আপনি কেবল লিখতে পারেন

string[] arrayToBeFilled;
arrayToBeFilled= arrayToBeFilled.Append("str").ToArray();

তদ্ব্যতীত, আপনি যদি একাধিক উপাদান দিয়ে কোনও অ্যারে পূরণ করতে চান তবে আপনি আগের কোডটি একটি লুপে ব্যবহার করতে পারেন

//the array you want to fill values in
string[] arrayToBeFilled;
//list of values that you want to fill inside an array
List<string> listToFill = new List<string> { "a1", "a2", "a3" };
//looping through list to start filling the array

foreach (string str in listToFill){
// here are the LINQ extensions
arrayToBeFilled= arrayToBeFilled.Append(str).ToArray();
}


0
         static void Main(string[] args)
        {
            int[] arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/
            int i, j;


          /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

             /*output each array element value*/
            for (j = 0; j < 5; j++)
            {
                Console.WriteLine("Element and output value [{0}]={1}",j,arrayname[j]);
            }
            Console.ReadKey();/*Obtains the next character or function key pressed by the user.
                                The pressed key is displayed in the console window.*/
        }

0
            /*arrayname is an array of 5 integer*/
            int[] arrayname = new int[5];
            int i, j;
            /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

0

ToArray () পদ্ধতিটি ব্যবহার না করে C # ব্যবহার করে স্ট্রিং অ্যারেটিতে তালিকা মান যুক্ত করতে

        List<string> list = new List<string>();
        list.Add("one");
        list.Add("two");
        list.Add("three");
        list.Add("four");
        list.Add("five");
        string[] values = new string[list.Count];//assigning the count for array
        for(int i=0;i<list.Count;i++)
        {
            values[i] = list[i].ToString();
        }

মান অ্যারের আউটপুট থাকে:

এক

দুই

তিন

চার

পাঁচ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.