সমস্ত সম্ভাব্য অ্যারে প্রারম্ভিক বাক্য গঠন


উত্তর:


776

এগুলি হ'ল একটি সাধারণ অ্যারের জন্য বর্তমান ঘোষণা এবং সূচনা পদ্ধতি।

string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2

নোট করুন যে অ্যারে প্রাপ্তির অন্যান্য কৌশল যেমন লিনক ToArray()এক্সটেনশানগুলি বিদ্যমান IEnumerable<T>

এছাড়াও নোট করুন যে উপরের ঘোষণাগুলিতে, প্রথম দুটি string[]বামদিকে var(C # 3+) দিয়ে প্রতিস্থাপন করতে পারে , কারণ ডানদিকে থাকা তথ্যগুলি সঠিক ধরণের অনুমানের জন্য যথেষ্ট। তৃতীয় লাইনটি অবশ্যই প্রদর্শিত হিসাবে লেখা উচিত, কারণ একা অ্যারে প্রারম্ভিককরণ সিনট্যাক্স সংকলকের চাহিদা পূরণের জন্য যথেষ্ট নয়। চতুর্থটি অনুমান ব্যবহার করতে পারে। সুতরাং আপনি যদি পুরো ব্রেভিটি জিনিসটির মধ্যে থাকেন তবে উপরের হিসাবে লেখা যেতে পারে

var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2 

1
কৌতূহলের বাইরে, কেউ কি ব্যাখ্যা করতে পারে যে তৃতীয় লাইনে আদ্যক্ষর প্রকাশটি কেন নিজের দ্বারা ব্যবহার করা যায় না (উদাহরণস্বরূপ কোনও পদ্ধতিতে পাস করা) বা কোনও varভেরিয়েবলের জন্য বরাদ্দ করা যেতে পারে ?
রুবেন 9922

1
@ রুবেন 9922: আকর্ষণীয় প্রশ্ন। এটি অর্থবহ হয়ে উঠবে যে var x = {}অ্যারে ইনিশিয়ালাইজার অ্যারে ব্যতীত অন্য কিছু উপার্জন করতে পারে তা যদি কাজ করে না তবে আমি কী তা জানি না। সুতরাং আমি অনুমান করি অ্যারে প্রারম্ভিক একটি ভাষা বৈশিষ্ট্য। আপনি যদি এটির সাথে new List<string> {"A", "B"}এটি ব্যবহার করেন তবে ভিন্ন কিছুও পাওয়া যায়।
টিভিডিএইচ

441

সি # তে অ্যারে তৈরি বাক্য গঠন যা প্রকাশ হয়:

new int[3]
new int[3] { 10, 20, 30 }
new int[] { 10, 20, 30 }
new[] { 10, 20, 30 }

প্রথমটিতে, আকারটি কোনও অ-নেতিবাচক ইন্টিগ্রাল মান হতে পারে এবং অ্যারের উপাদানগুলি ডিফল্ট মানগুলিতে আরম্ভ হয়।

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

তৃতীয় একটিতে, উপাদানগুলি অবশ্যই অবশ্যই এলিমেন্টের ধরণের রূপান্তরিত হতে হবে এবং প্রদত্ত উপাদানের সংখ্যা থেকে আকার নির্ধারণ করা হবে।

চতুর্থ একটিতে অ্যারের উপাদানগুলির ধরণটি ধরণের সমস্ত প্রদত্ত উপাদানগুলির মধ্যে সেরা ধরণের, যদি একটি থাকে তবে তা নির্ধারণ করা হয়। সমস্ত উপাদান অবশ্যই প্রকারভেদে রূপান্তরিত হতে হবে। আকার প্রদত্ত উপাদানগুলির সংখ্যা থেকে নির্ধারিত হয়। এই বাক্য গঠনটি সি # 3.0 তে চালু হয়েছিল।

একটি বাক্য গঠন রয়েছে যা কেবলমাত্র একটি ঘোষণায় ব্যবহৃত হতে পারে:

int[] x = { 10, 20, 30 };

উপাদানগুলি অবশ্যই এলিমেন্টের ধরণের রূপে রূপান্তরিত হতে হবে। আকার প্রদত্ত উপাদানগুলির সংখ্যা থেকে নির্ধারিত হয়।

একটি সর্বস্তর গাইড নেই

আমি আপনাকে সি # 4.0 স্পেসিফিকেশন, বিভাগ 7.6.10.4 "অ্যারে ক্রিয়েশন এক্সপ্রেশন" উল্লেখ করি।


8
@ বোল্টক্লক: আপনি যে প্রথম সিনট্যাক্সটি উল্লেখ করেছেন তা হ'ল "অন্তর্নিহিতভাবে টাইপ করা অ্যারে ক্রিয়া এক্সপ্রেশন"। দ্বিতীয়টি একটি "বেনামে অবজেক্ট তৈরির এক্সপ্রেশন"। আপনি অন্য দুটি অনুরূপ সিনট্যাক্স তালিকাভুক্ত করবেন না; এগুলি হ'ল "অবজেক্ট ইনিশিয়ালাইজার" এবং "সংগ্রহ আরম্ভকারী"।
এরিক লিপার্ট

11
ঠিক সি # "সিনট্যাক্স" নয়, তবে আসুন ভুলে যাবেন না (আমার ব্যক্তিগত প্রিয়) Array.CreateInstance(typeof(int), 3)!
জেফ্রি এল হুইলেটজ

17
@ জেফ্রি: আমরা যদি সেই রাস্তা দিয়ে নামি, তবে এটি নির্বোধ হতে শুরু করে। যেমন "1,2,3,4".split(','),।
ব্রায়ান

11
তারপর বহু মাত্রিক অ্যারে জন্য, অস্তিত্ব "নেস্টেড" স্বরলিপি চাই new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };, এবং তাই উপর int[,,], int[,,,]...
Jeppe Stig নিলসেন

6
@ লার্নিং-ওভারথিংকার-বিভ্রান্ত: আপনার দুটি ঘোড়া রয়েছে। আপনি কোনটি দ্রুত তা জানতে ইচ্ছুক। আপনি কি (1) ঘোড়াগুলিকে প্রতিযোগিতা করেন, বা (2) ইন্টারনেটে এমন কোনও অপরিচিত ব্যক্তিকে জিজ্ঞাসা করেন যিনি কখনও যে ঘোড়াগুলি দেখেননি যে তাকে দ্রুত বলে? আপনার ঘোড়া দৌড় । আপনি জানতে চান কোনটি আরও "দক্ষ"? দক্ষতার জন্য প্রথমে একটি পরিমাপযোগ্য স্ট্যান্ডার্ড তৈরি করুন; মনে রাখবেন, দক্ষতা হ'ল ইউনিট ব্যয় অনুযায়ী উত্পাদিত মান , সুতরাং আপনার মূল্য এবং ব্যয়টি সাবধানতার সাথে সংজ্ঞায়িত করুন। তারপরে কোড দুটিভাবে লিখুন এবং এর কার্যকারিতা পরিমাপ করুন। অনুমানের জন্য এলোমেলো অপরিচিত জিজ্ঞাসা না করে বৈজ্ঞানিক প্রশ্নের উত্তর দিতে বিজ্ঞান ব্যবহার করুন
এরিক লিপার্ট

111

খালি নয় অ্যারে

  • var data0 = new int[3]

  • var data1 = new int[3] { 1, 2, 3 }

  • var data2 = new int[] { 1, 2, 3 }

  • var data3 = new[] { 1, 2, 3 }

  • var data4 = { 1, 2, 3 }সংকলনযোগ্য নয়। int[] data5 = { 1, 2, 3 }পরিবর্তে ব্যবহার করুন।

খালি অ্যারে

  • var data6 = new int[0]
  • var data7 = new int[] { }
  • var data8 = new [] { } এবং int[] data9 = new [] { }সংকলনযোগ্য নয়।

  • var data10 = { }সংকলনযোগ্য নয়। int[] data11 = { } পরিবর্তে ব্যবহার করুন।

একটি পদ্ধতির যুক্তি হিসাবে

varকীওয়ার্ডের সাথে বরাদ্দ করা যেতে পারে কেবল এমন বাক্যগুলি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে।

  • Foo(new int[2])
  • Foo(new int[2] { 1, 2 })
  • Foo(new int[] { 1, 2 })
  • Foo(new[] { 1, 2 })
  • Foo({ 1, 2 }) সংকলনযোগ্য নয়
  • Foo(new int[0])
  • Foo(new int[] { })
  • Foo({}) সংকলনযোগ্য নয়

14
অবৈধ সিন্টেক্সগুলি বৈধের থেকে আলাদা করে আলাদা করা ভাল।
jpmc26

প্রদত্ত উদাহরণগুলি কি সম্পূর্ণ? অন্য কোন মামলা আছে?
মানি ওরিয়েন্টেড প্রোগ্রামার

49
Enumerable.Repeat(String.Empty, count).ToArray()

'গণনা' বারবার খালি স্ট্রিংগুলির অ্যারে তৈরি করবে। আপনি যদি একই বিশেষ বিশেষ ডিফল্ট উপাদানের সাথে অ্যারে শুরু করতে চান তবে। রেফারেন্স প্রকারের সাথে যত্নশীল, সমস্ত উপাদান একই বস্তুকে রেফার করবে।


5
হ্যাঁ, var arr1 = Enumerable.Repeat(new object(), 10).ToArray();আপনি একই বস্তুর জন্য 10 রেফারেন্স পাবেন get 10 টি স্বতন্ত্র অবজেক্ট তৈরি করতে আপনি ব্যবহার করতে পারেন var arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();বা অনুরূপ করতে পারেন ।
জেপ্প স্টিগ নীলসন

20
var contacts = new[]
{
    new 
    {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new 
    {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

আপনি এই কাঠামোটি কীভাবে ব্যবহার করবেন? এটি কি অভিধানের মতো?
আর নভেগা

1
@ আর.নাভেগা এটি একটি সাধারণ অ্যারে :)
গ্রোভেলপ্লেক্স

17

আপনি যদি প্রাক-প্রাথমিক সমতুল্য (অ- nullবা অন্য কোনও default) উপাদানগুলির একটি নির্দিষ্ট অ্যারে শুরু করতে চান তবে এটি ব্যবহার করুন:

var array = Enumerable.Repeat(string.Empty, 37).ToArray();

এছাড়াও এই আলোচনায় অংশ নিন ।


13

একটি কাস্টম শ্রেণীর অ্যারে তৈরির উদাহরণ

নীচে বর্গ সংজ্ঞা দেওয়া আছে।

public class DummyUser
{
    public string email { get; set; }
    public string language { get; set; }
}

এইভাবে আপনি অ্যারে শুরু করতে পারেন:

private DummyUser[] arrDummyUser = new DummyUser[]
{
    new DummyUser{
       email = "abc.xyz@email.com",
       language = "English"
    },
    new DummyUser{
       email = "def@email.com",
       language = "Spanish"
    }
};


6
int[] array = new int[4]; 
array[0] = 10;
array[1] = 20;
array[2] = 30;

অথবা

string[] week = new string[] {"Sunday","Monday","Tuesday"};

অথবা

string[] array = { "Sunday" , "Monday" };

এবং বহু মাত্রিক অ্যারে

    Dim i, j As Integer
    Dim strArr(1, 2) As String

    strArr(0, 0) = "First (0,0)"
    strArr(0, 1) = "Second (0,1)"

    strArr(1, 0) = "Third (1,0)"
    strArr(1, 1) = "Fourth (1,1)"

5
হাই, উদাহরণগুলির শেষ ব্লকটি ভিজ্যুয়াল বেসিক হিসাবে উপস্থিত হবে, প্রশ্নটি সি # উদাহরণগুলির জন্য জিজ্ঞাসা করে।
অ্যালেক্স কীস্মিত


2

অবজেক্টের অ্যারে তৈরি এবং আরম্ভ করার আরেকটি উপায়। এটি @ আমল উপরের পোস্টের উদাহরণের সাথে মিলে যায় , বাদে এটি নির্মাণকারী ব্যবহার করে। পলিমারফিজমের একটি ড্যাশ ছড়িয়ে পড়েছে, আমি প্রতিরোধ করতে পারিনি।

IUser[] userArray = new IUser[]
{
    new DummyUser("abc@cde.edu", "Gibberish"),
    new SmartyUser("pga@lna.it", "Italian", "Engineer")
};

প্রসঙ্গে ক্লাস:

interface IUser
{
    string EMail { get; }       // immutable, so get only an no set
    string Language { get; }
}

public class DummyUser : IUser
{
    public DummyUser(string email, string language)
    {
        m_email = email;
        m_language = language;
    }

    private string m_email;
    public string EMail
    {
        get { return m_email; }
    }

    private string m_language;
    public string Language
    {
        get { return m_language; }
    }
}

public class SmartyUser : IUser
{
    public SmartyUser(string email, string language, string occupation)
    {
        m_email = email;
        m_language = language;
        m_occupation = occupation;
    }

    private string m_email;
    public string EMail
    {
        get { return m_email; }
    }

    private string m_language;
    public string Language
    {
        get { return m_language; }
    }

    private string m_occupation;
}

1

নীচের শ্রেণীর জন্য:

public class Page
{

    private string data;

    public Page()
    {
    }

    public Page(string data)
    {
        this.Data = data;
    }

    public string Data
    {
        get
        {
            return this.data;
        }
        set
        {
            this.data = value;
        }
    }
}

আপনি নীচের হিসাবে উপরের বস্তুর অ্যারে শুরু করতে পারেন।

Pages = new Page[] { new Page("a string") };

আশাকরি এটা সাহায্য করবে.


0

আপনি গতিশীল অ্যারেও তৈরি করতে পারেন অর্থাৎ আপনি অ্যারের তৈরির আগে প্রথমে অ্যারের আকারটি জিজ্ঞাসা করতে পারেন।

Console.Write("Enter size of array");
int n = Convert.ToInt16(Console.ReadLine());

int[] dynamicSizedArray= new int[n]; // Here we have created an array of size n
Console.WriteLine("Input Elements");
for(int i=0;i<n;i++)
{
     dynamicSizedArray[i] = Convert.ToInt32(Console.ReadLine());
}

Console.WriteLine("Elements of array are :");
foreach (int i in dynamicSizedArray)
{
    Console.WriteLine(i);
}
Console.ReadKey();

0

অভিব্যক্তি সহ তুচ্ছ সমাধান। মনে রাখবেন যে NewArrayInit এর সাহায্যে আপনি কেবলমাত্র এক-মাত্রিক অ্যারে তৈরি করতে পারেন।

NewArrayExpression expr = Expression.NewArrayInit(typeof(int), new[] { Expression.Constant(2), Expression.Constant(3) });
int[] array = Expression.Lambda<Func<int[]>>(expr).Compile()(); // compile and call callback

0

শুধু একটি নোট

নিম্নলিখিত অ্যারে:

string[] array = new string[2];
string[] array2 = new string[] { "A", "B" };
string[] array3 = { "A" , "B" };
string[] array4 = new[] { "A", "B" };

হবে কম্পাইল করুন:

string[] array = new string[2];
string[] array2 = new string[]
{
   "A",
   "B"
};
string[] array3 = new string[]
{
   "A",
   "B"
};
string[] array4 = new string[]
{
   "A",
   "B"
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.