আমার একটি তালিকা বা একটি অ্যারে ব্যবহার করা উচিত?


22

আইটেম সংখ্যার জন্য ইউপিসি গণনা করার জন্য আমি উইন্ডোজ ফর্মটিতে কাজ করছি।

আমি সফলভাবে একটি তৈরি করেছি যা একবারে একটি আইটেম নম্বর / ইউপিসি পরিচালনা করবে, এখন আমি একাধিক আইটেম নম্বর / ইউপিসির জন্য এটি প্রসারিত এবং করতে চাই।

আমি একটি তালিকা ব্যবহার এবং শুরু করার চেষ্টা করেছি, কিন্তু আমি আটকে থাকি। আমি একটি সহায়ক শ্রেণি তৈরি করেছি:

public class Codes
{
    private string incrementedNumber;
    private string checkDigit;
    private string wholeNumber;
    private string wholeCodeNumber;
    private string itemNumber;

    public Codes(string itemNumber, string incrementedNumber, string checkDigit, string wholeNumber, string wholeCodeNumber)
    {
        this.incrementedNumber = incrementedNumber;
        this.checkDigit = checkDigit;
        this.wholeNumber = wholeNumber;
        this.wholeCodeNumber = wholeCodeNumber;
        this.itemNumber = itemNumber;
    }

    public string ItemNumber
    {
        get { return itemNumber; }
        set { itemNumber = value; }
    }

    public string IncrementedNumber
    { 
        get { return incrementedNumber; }
        set { incrementedNumber = value; } 
    }

    public string CheckDigit
    {
        get { return checkDigit; }
        set { checkDigit = value; }
    }

    public string WholeNumber
    {
        get { return wholeNumber; }
        set { wholeNumber = value; }
    }

    public string WholeCodeNumber
    {
        get { return wholeCodeNumber; }
        set { wholeCodeNumber = value; }
    }

}

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

List<Codes> ItemNumberList = new List<Codes>();


    private void buttonSearch2_Click(object sender, EventArgs e)
    {
        //Fill the datasets
        this.immasterTableAdapter.FillByWildcard(this.alereDataSet.immaster, (textBox5.Text));
        this.upccodeTableAdapter.FillByWildcard(this.hangtagDataSet.upccode, (textBox5.Text));
        this.uPCTableAdapter.Fill(this.uPCDataSet.UPC);
        string searchFor = textBox5.Text;
        int results = 0;
        DataRow[] returnedRows;
        returnedRows = uPCDataSet.Tables["UPC"].Select("ItemNumber = '" + searchFor + "2'");
        results = returnedRows.Length;
        if (results > 0)
        {
            MessageBox.Show("This item number already exists!");
            textBox5.Clear();
            //clearGrids();
        }
        else
        {
            //textBox4.Text = dataGridView1.Rows[0].Cells[1].Value.ToString();
            MessageBox.Show("Item number is unique.");
        }
    }

    public void checkMarks()
    {

        for (int i = 0; i < dataGridView7.Rows.Count; i++)
        {
            if ((bool)dataGridView7.Rows[i].Cells[3].FormattedValue)
            {
                {
                    ItemNumberList.Add(new Codes(dataGridView7.Rows[i].Cells[0].Value.ToString(), "", "", "", ""));
                }
            }
        }
    }

    public void multiValue1()
    {
        _value = uPCDataSet.UPC.Rows[uPCDataSet.UPC.Rows.Count - 1]["UPCNumber"].ToString();//get last UPC from database
        _UPCNumber = _value.Substring(0, 11);//strip out the check-digit
        _UPCNumberInc = Convert.ToInt64(_UPCNumber);//convert the value to a number

        for (int i = 0; i < ItemNumberList.Count; i++)
        {
            _UPCNumberInc = _UPCNumberInc + 1;
            _UPCNumberIncrement = Convert.ToString(_UPCNumberInc);//assign the incremented value to a new variable
            ItemNumberList.Add(new Codes("", _UPCNumberIncrement, "", "", ""));//**here I get the OutOfMemoreyException**
        }

        for (int i = 0; i < ItemNumberList.Count; i++)
        {
            long chkDigitOdd;
            long chkDigitEven;
            long chkDigitSubtotal;
            chkDigitOdd = Convert.ToInt64(_UPCNumberIncrement.Substring(0, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(2, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(4, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(6, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(8, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(10, 1));
            chkDigitOdd = (3 * chkDigitOdd);
            chkDigitEven = Convert.ToInt64(_UPCNumberIncrement.Substring(1, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(3, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(5, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(7, 1)) + Convert.ToInt64(_UPCNumberIncrement.Substring(9, 1));
            chkDigitSubtotal = (300 - (chkDigitEven + chkDigitOdd));
            _chkDigit = chkDigitSubtotal.ToString();
            _chkDigit = _chkDigit.Substring(_chkDigit.Length - 1, 1);
            ItemNumberList.Add(new Codes("", "",_chkDigit, "", ""));
        }

এটি কি তালিকার সাহায্যে এটিকে ঘুরে দেখার সঠিক উপায়, না আমার অন্য কোনও উপায়ে তাকানো উচিত?


একটি তালিকা ব্যবহার করা ভাল। তালিকাগুলি যুক্ত করার সময় এটি কোডিং করা আপনার কোডটি ফুটিয়ে তোলার একটি নিশ্চিত উপায়, এবং আপনার যুক্তিতে (বা কোড লেখার) কোনও সমস্যা নির্দেশ করে। এছাড়াও, এটি আপনার বাগ এবং ভবিষ্যতের দর্শকদের সাহায্য করার সম্ভাবনা নেই। ভোট বন্ধ।
টেলাস্টিন

2
পার্শ্ব নোট হিসাবে, এই সমস্ত ব্যক্তিগত ক্ষেত্রগুলি (আপনার Codeশ্রেণিতে) অপ্রয়োজনীয় এবং সত্যই গোলমাল ছাড়া কিছুই { get; private set; }যথেষ্ট নয়।
কনরাড মোরাউস্কি

5
এই জন্য প্রশ্নের শিরোনাম কি সত্য? এটি সত্যিই কোনও তালিকা বনাম অ্যারে প্রশ্নের মতো মনে হচ্ছে না , এতটা কীভাবে আমি আমার বাস্তবায়ন প্রশ্নটিকে আরও উন্নত করতে পারি । বলা হচ্ছে, আপনি যদি উপাদানগুলি যুক্ত বা মুছে ফেলছেন তবে আপনি একটি তালিকা (বা অন্যান্য নমনীয় ডেটা কাঠামো) চান। অ্যারেগুলি কেবল তখনই ভাল থাকে যখন আপনি শুরুতে ঠিক কতগুলি উপাদান প্রয়োজন তা জানেন।
কেচালাক্স

@ কেচালাক্স, আমি যা জানতে চেয়েছিলাম তা অনেকটাই। একটি তালিকা কি এটি সম্পর্কে সঠিক উপায়, বা আমার এটি অনুসরণ করার জন্য অন্য কোনও উপায়ে তাকানো উচিত ছিল? সুতরাং মনে হচ্ছে একটি তালিকা একটি ভাল উপায়, আমাকে কেবল আমার যুক্তি সামঞ্জস্য করতে হবে।
ক্যাম্পাগনলো_1

1
@ টেলাস্টিন, আমি আমার কোডটি উন্নত করতে এতটা বলিনি যে আমি কী করতে চাইছি তা দেখাতে।
ক্যাম্পাগনলো_1

উত্তর:


73

আমি আমার মন্তব্য প্রসারিত করব:

... আপনি যদি উপাদানগুলি যুক্ত বা মুছে ফেলছেন তবে আপনি একটি তালিকা (বা অন্যান্য নমনীয় ডেটা কাঠামো) চান। অ্যারেগুলি কেবল তখনই ভাল তবে আপনি যখন শুরুতে ঠিক কতগুলি উপাদান প্রয়োজন তা জানেন।

একটি দ্রুত ব্রেকডাউন

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

  • নির্দিষ্ট আকার
  • দ্রুত অ্যাক্সেস - ও (1)
  • ধীরে ধীরে পরিবর্তন করুন - ও (এন) - প্রতিটি উপাদানকে একটি নতুন অ্যারেতে অনুলিপি করতে হবে!

লিঙ্কযুক্ত-তালিকাগুলি উভয় প্রান্তে দ্রুত সংযোজন এবং অপসারণের জন্য অনুকূলিত, তবে মাঝখানে অ্যাক্সেস করতে ধীর হয়।

  • পরিবর্তনশীল আকার
  • মাঝখানে ধীর অ্যাক্সেস - ও (এন)
    • পছন্দসই সূচকে পৌঁছানোর জন্য মাথা থেকে শুরু করে প্রতিটি উপাদানকে অতিক্রম করতে হবে
  • হেড এ দ্রুত অ্যাক্সেস - ও (1)
  • টেইলে সম্ভাব্য দ্রুত অ্যাক্সেস
    • ও (1) যদি রেফারেন্সটি পুচ্ছের শেষে সংরক্ষণ করা হয় (দ্বিগুণ-সংযুক্ত তালিকার মতো)
    • ও (এন) যদি কোনও রেফারেন্স সংরক্ষণ না করা হয় (মাঝখানে নোড অ্যাক্সেস করার মতো জটিলতা)

অ্যারে তালিকা (যেমন List<T>সি # তে!) মোটামুটি দ্রুত সংযোজন এবং এলোমেলো অ্যাক্সেস সহ দুটির সংমিশ্রণ । List<T> আপনি কী ব্যবহার করবেন তা নিশ্চিত না হলে প্রায়শই আপনার যেতে যাওয়া সংগ্রহ হতে পারে।

  • ব্যাকিং স্ট্রাকচার হিসাবে একটি অ্যারে ব্যবহার করে
  • এর আকার পরিবর্তন সম্পর্কে স্মার্ট - এটি শেষ হয়ে গেলে তার বর্তমান স্থানের দ্বিগুণ বরাদ্দ দেয়।
    • এটি ও (লগ এন) আকারগুলিতে বাড়ে, যা আমরা প্রতিবার যুক্ত / সরানোর সময় পরিবর্তন করার চেয়ে ভাল is
  • দ্রুত অ্যাক্সেস - ও (1)

অ্যারে কীভাবে কাজ করে

বেশিরভাগ ভাষাগুলিতে মেমরির সংলগ্ন ডেটা হিসাবে মডেল অ্যারে থাকে, যার মধ্যে প্রতিটি উপাদান একই আকারের হয়। ধরা যাক আমাদের একটি অ্যারে ছিল int([ঠিকানা হিসাবে দেখানো হয়েছে], দশমিক ঠিকানা ব্যবহার করে কারণ আমি অলস)

[0: 10][32: 20][64: 30][96: 40][128: 50][160: 60]

এই উপাদানগুলির প্রত্যেকটি একটি 32-বিট পূর্ণসংখ্যা, তাই আমরা জানি যে এটি মেমরির ক্ষেত্রে কতটা জায়গা নেয় (32 বিট!)। এবং আমরা প্রথম উপাদানটির পয়েন্টারের মেমরি ঠিকানা জানি।

এই অ্যারেতে অন্য যে কোনও উপাদানটির মান পাওয়া তুচ্ছভাবে সহজ:

  • প্রথম উপাদানটির ঠিকানা নিন
  • প্রতিটি উপাদানের অফসেট নিন (মেমরির আকারে)
  • পছন্দসই সূচক দ্বারা অফসেটকে গুণ করুন
  • আপনার ফলাফলটি প্রথম উপাদানটির ঠিকানায় যুক্ত করুন

ধরা যাক আমাদের প্রথম উপাদানটি '0' এ রয়েছে। আমরা জানি আমাদের দ্বিতীয় উপাদানটি '32 '(0 + (32 * 1)) এ রয়েছে এবং আমাদের তৃতীয় উপাদানটি 64 (0 + (32 * 2)) এ রয়েছে।

আমরা এই সমস্ত মানগুলি একে অপরের পাশে মেমোরিতে সংরক্ষণ করতে পারি তার অর্থ আমাদের অ্যারেটি যতটা সম্ভব কমপ্যাক্ট। এর অর্থ হ'ল জিনিসগুলি চালিয়ে যাওয়ার জন্য আমাদের সমস্ত উপাদানগুলির একসাথে থাকা প্রয়োজন !

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

লিঙ্কযুক্ত তালিকাগুলি

অ্যারেগুলির বিপরীতে, লিঙ্কযুক্ত তালিকাগুলির মেমরির ক্ষেত্রে তাদের সমস্ত উপাদানগুলির একে অপরের পাশে থাকা প্রয়োজন। এগুলি নোডগুলি নিয়ে গঠিত, যা নিম্নলিখিত তথ্যগুলি সংরক্ষণ করে:

Node<T> {
    Value : T      // Value of this element in the list
    Next : Node<T> // Reference to the node that comes next
}

তালিকাটি বেশিরভাগ ক্ষেত্রেই মাথা এবং লেজ (প্রথম এবং শেষ নোড) এর একটি রেফারেন্স রাখে এবং কখনও কখনও তার আকারের উপর নজর রাখে।

আপনি যদি তালিকার শেষে কোনও উপাদান যুক্ত করতে চান তবে আপনাকে কেবল লেজটি পেতে হবে এবং এটিতে আপনার মান সম্বলিত Nextএকটি নতুন রেফারেন্সে পরিবর্তন করতে হবে change Nodeপ্রান্ত থেকে অপসারণ করা সমান সহজ - কেবল Nextপূর্ববর্তী নোডের মানকে অবজ্ঞা করুন ।

দুর্ভাগ্যক্রমে, যদি আপনার LinkedList<T>1000 টি উপাদান রয়েছে এবং আপনি 500 টি উপাদান চান, তবে অ্যারের মতো 500 ম এলিমেন্টের ডানদিকে ঝাঁপানোর কোনও সহজ উপায় নেই। আপনি 500 বার এটি না করা পর্যন্ত আপনাকে মাথা থেকে শুরু করতে হবে এবং Nextনোডে যেতে হবে ।

এ কারণেই একটি থেকে যুক্ত করা এবং অপসারণ LinkedList<T>দ্রুত (প্রান্তে কাজ করার সময়) তবে মাঝখানে অ্যাক্সেস করা ধীর হয়।

সম্পাদনা : ব্রায়ান মন্তব্যগুলিতে উল্লেখ করেছেন যে সংযুক্ত স্মৃতিতে সঞ্চিত না হওয়ার কারণে লিঙ্কযুক্ত তালিকার একটি পৃষ্ঠা ত্রুটি হওয়ার ঝুঁকি রয়েছে। মানদণ্ডের পক্ষে এটি শক্ত হতে পারে এবং লিঙ্কযুক্ত তালিকাগুলি কেবলমাত্র তাদের সময় জটিলতার কারণে আপনি আশা করতে পারেন তার চেয়ে কিছুটা ধীর করে দিতে পারে can

দুই ভুবনের সেরা

List<T>উভয়ের জন্য আপস করে T[]এবং LinkedList<T>এমন একটি সমাধান নিয়ে আসে যা বেশিরভাগ পরিস্থিতিতে যুক্তিসঙ্গতভাবে দ্রুত এবং সহজেই ব্যবহার করা যায়।

অভ্যন্তরীণভাবে, List<T>একটি অ্যারে! এটি পুনরায় আকার দেওয়ার সময় এর উপাদানগুলি অনুলিপি করার ফাঁক দিয়ে ঝাঁপিয়ে পড়েছে তবে এটি কিছু ঝরঝরে কৌশলগুলি টানছে।

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

অনুলিপি ক্রিয়াকলাপগুলি ব্যয়বহুল, তাই List<T>দ্রুত এলোমেলো অ্যাক্সেসের অনুমতি দেওয়ার পরে যতটা সম্ভব তাদের উপর চাপ দিন। পার্শ্ব প্রতিক্রিয়া হিসাবে, এটি স্ট্রেট-আপ অ্যারে বা লিঙ্কযুক্ত তালিকার চেয়ে কিছুটা বেশি জায়গা নষ্ট করতে পারে তবে এটি সাধারণত ট্রেড অফের পক্ষে মূল্যবান।

টি এল; ডিআর

ব্যবহার List<T>। এটি সাধারণত যা আপনি চান তা এটি আপনার কাছে সঠিক বলে মনে হচ্ছে (যেখানে আপনি ফোন করছেন A যুক্ত করুন ())। আপনার যা প্রয়োজন তা সম্পর্কে যদি আপনি অনিশ্চিত হন তবে List<T>এটি শুরু করার জন্য ভাল জায়গা।

অ্যারে উচ্চ-পারফরম্যান্সের জন্য ভাল, "আমি জানি আমার ঠিক এক্স উপাদানগুলি দরকার"। বিকল্পভাবে, এগুলি দ্রুত, এক-বন্ধের জন্য দরকারী "আমি ইতিমধ্যে একসাথে সংজ্ঞায়িত করেছি এই এক্স জিনিসগুলিকে গ্রুপ করা দরকার যাতে আমি তাদের উপর লুপ করতে পারি" কাঠামোগুলি।

অন্যান্য সংগ্রহের ক্লাস রয়েছে। Stack<T>লিঙ্কযুক্ত তালিকার মতো যা কেবল শীর্ষ থেকে চালিত হয়। Queue<T>প্রথম-প্রথম-প্রথম তালিকা হিসাবে কাজ করে। Dictionary<T, U>কী এবং মানগুলির মধ্যে একটি নিরক্ষিত, সাহসী ম্যাপিং। তাদের সাথে খেলুন এবং প্রত্যেকের শক্তি এবং দুর্বলতাগুলি জানুন। তারা আপনার অ্যালগরিদমগুলি তৈরি করতে বা ভাঙ্গতে পারে।


2
কিছু ক্ষেত্রে, অ্যারের সংমিশ্রণ এবং intব্যবহারযোগ্য উপাদানগুলির সংখ্যার সাথে একটি ইঙ্গিত ব্যবহার করার সুবিধা থাকতে পারে । অন্যান্য জিনিসের মধ্যে, এক থেকে অন্য অ্যারে একাধিক উপাদানকে বাল্ক-অনুলিপি করা সম্ভব, তবে তালিকার মধ্যে অনুলিপি করার জন্য সাধারণত পৃথকভাবে প্রক্রিয়াজাতকরণ উপাদানগুলির প্রয়োজন হয়। আরও, অ্যারে উপাদানগুলি এ জাতীয় refজিনিসগুলিতে যেতে পারে Interlocked.CompareExchange, তবে তালিকার আইটেমগুলি পারে না।
সুপারক্যাট

2
আমি আশা করি আমি একাধিক upvote দিতে পারে। আমি ব্যবহারের ক্ষেত্রে পার্থক্যগুলি জানতাম এবং অ্যারে / লিঙ্কযুক্ত তালিকাগুলি কীভাবে কাজ করেছিল তা আমি জানি না, তবে আমি কখনই জানি না বা List<>হুডের অধীনে কীভাবে কাজ করেছি সে সম্পর্কে আমি কখনই জানতাম না বা ভাবিনি ।
ববসন

1
একটি তালিকায় একটি উপাদান যুক্ত করা <T> হ'ল রূপান্তরিত হে (1); উপাদান যুক্ত করার দক্ষতা সাধারণত একটি লিঙ্কযুক্ত তালিকাগুলি ব্যবহার করার পর্যাপ্ত সমর্থনযোগ্যতা নয় (এবং একটি বিজ্ঞপ্তি তালিকা আপনাকে সামনে এবং পিছনে এমওরাইজড ও (1)) এ যুক্ত করতে দেয়। লিঙ্কযুক্ত তালিকাগুলিতে প্রচুর পারফরম্যান্স আইডিসিএনক্র্যাসি থাকে। উদাহরণস্বরূপ, স্মৃতিতে স্বচ্ছভাবে সংরক্ষণ না করা মানে পুরো লিঙ্কযুক্ত তালিকার উপরে পুনরাবৃত্তি হওয়া কোনও পৃষ্ঠা দোষকে ট্রিগার করার সম্ভাবনা বেশি ... এবং এটি বেঞ্চমার্কের পক্ষে কঠিন। একটি লিঙ্কযুক্ত তালিকা ব্যবহারের বৃহত্তর সমর্থনযোগ্যতা হ'ল আপনি যখন দুটি তালিকাকে সম্মতি জানাতে চান (ও (1) এ করতে পারেন) বা উপাদানগুলিকে মাঝখানে যুক্ত করতে চান।
ব্রায়ান

1
আমার স্পষ্ট করা উচিত যখন আমি বিজ্ঞপ্তি তালিকা বলেছিলাম, আমি একটি বৃত্তাকার অ্যারে তালিকা বলতে চাই, একটি বৃত্তাকার লিঙ্কযুক্ত তালিকা নয়। সঠিক শব্দটি হবে দ্বৈত (ডাবল-শেষ সারি)। এগুলি প্রায়শই একটি ব্যতিক্রম সহ একটি তালিকা (হুডের নীচে অ্যারে) হিসাবে প্রায় একইভাবে প্রয়োগ করা হয়: একটি অভ্যন্তরীণ পূর্ণসংখ্যা মান রয়েছে, "প্রথম" যা নির্দেশ করে যে অ্যারের সূচকটি প্রথম উপাদান is পিছনে কোনও উপাদান যুক্ত করতে, আপনি কেবল "প্রথম" থেকে 1 টি বিয়োগ করুন (প্রয়োজনে অ্যারের দৈর্ঘ্যটি প্রায় মোড়ানো)। কোনও উপাদান অ্যাক্সেস করতে, আপনি কেবল অ্যাক্সেস করতে পারেন (index+first)%length
ব্রায়ান

2
কিছু তালিকা রয়েছে যা আপনি তালিকার সাথে না করতে পারেন যা আপনি একটি সরল অ্যারে দিয়ে করতে পারেন, উদাহরণস্বরূপ, একটি সূচক উপাদানটি রেফ প্যারামিটার হিসাবে পাস করা।
আয়ান গোল্ডবি

6

যদিও কেচালক্স উত্তরটি দুর্দান্ত, আমি আরেকটি বিবেচনা উল্লেখ করতে চাই: List<T>একটি অ্যারের চেয়ে অনেক বেশি শক্তিশালী। এর পদ্ধতিগুলি List<T>অনেক পরিস্থিতিতে খুব কার্যকর - একটি অ্যারেতে এই পদ্ধতিগুলি নেই এবং আপনি কাজের পরিমাণ প্রয়োগ করতে অনেক সময় ব্যয় করতে পারেন।

সুতরাং, উন্নয়নের দৃষ্টিকোণ থেকে আমি প্রায়শই ব্যবহার করি List<T>কারণ যখন অতিরিক্ত প্রয়োজনীয়তা থাকে তখন আপনি যখন এটি ব্যবহার করছেন তখন এগুলি প্রায়শই কার্যকর করা সহজ হয় List<T>

একটি চূড়ান্ত সমস্যা এই বিশালাকার: আমার কোড (আমি তোমার সম্পর্কে জানি না) 90% রয়েছে List<T>সুতরাং অ্যারে সত্যিই মধ্যে ঝুলানো হয় না, যখন আমি তাদের চারপাশে পাস, আমি তাদের সাথে যোগাযোগ করতে হবে। .toList()পদ্ধতি এবং তাদেরকে একটি তালিকা রূপান্তর - এই বিরক্তিকর এবং এত ধীর যে অ্যারে ব্যবহার করে কোনও পারফরম্যান্স লাভ নষ্ট হয়।


এটি সত্য, তালিকার <T> ব্যবহারের এটি আরও একটি ভাল কারণ - এটি সরাসরি শ্রেণিতে আপনার জন্য নির্মিত আরও অনেক কার্যকারিতা সরবরাহ করে।
কেচালাক্স

1
লিনকিউ কোনও আইয়নামারেবল (একটি অ্যারে সহ) এর জন্য অনেকগুলি কার্যকারিতা যুক্ত করে ক্ষেত্রকে সমতল করে না? আধুনিক সি # (4+) তে কি এমন কিছু বাকী আছে যা আপনি কেবল একটি তালিকা <টি> এবং অ্যারে না দিয়েই করতে পারেন?
ডেভ

1
@ ডেভ অ্যারে / তালিকা বাড়ানো এমন একটি বিষয় মনে হচ্ছে seems এছাড়াও, আমি বলব একটি তালিকা তৈরি / পরিচালনা করতে সিনট্যাক্স অ্যারেগুলির চেয়ে অনেক সুন্দর are
খ্রিস্টান সৌর

2

নুন যদিও এই অংশটি উল্লেখ করেছেন: "এবং এখানে আমি ইতিমধ্যে একটি আউট অফ মেমরি ব্যতিক্রম পেয়েছি।" যা পুরোপুরি কারণে

for (int i = 0; i < ItemNumberList.Count; i++)
{
    ItemNumberList.Add(new item());
}

এটা কেন সহজ তা স্পষ্ট। আপনি কি অন্য কোনও তালিকায় যুক্ত করতে চেয়েছিলেন বা ItemNumberList.Countআপনার পছন্দসই ফলাফলটি পাওয়ার জন্য লুপের আগে কেবল একটি পরিবর্তনশীল হিসাবে সঞ্চয় করা উচিত কিনা তা আমি জানি না , তবে এটি কেবল ভাঙ্গা।

প্রোগ্রামারস.এসই হ'ল "... সফ্টওয়্যার বিকাশ সম্পর্কে ধারণামূলক প্রশ্নে আগ্রহী ..." এর জন্য এবং অন্যান্য উত্তরগুলি এটিকে এরূপ বলে বিবেচনা করে। পরিবর্তে http://codereview.stackexchange.com চেষ্টা করুন , যেখানে এই প্রশ্নটি ফিট হবে। তবে এটি সেখানে ভয়াবহতা রয়েছে, কারণ আমরা কেবলমাত্র এই কোডটি শুরু হতেই অনুমান করতে পারি _Click, multiValue1যেখানে আপনার ত্রুটিটি ঘটেছিল সেখানে কোনও কল নেই ।

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