2 টি মাত্রিক তালিকা কি সি # তে সম্ভব?


91

আমি একটি বহুমাত্রিক তালিকা স্থাপন করতে চাই। রেফারেন্সের জন্য, আমি প্লেলিস্ট বিশ্লেষক নিয়ে কাজ করছি।

আমার একটি ফাইল / ফাইল-তালিকা রয়েছে, যা আমার প্রোগ্রামটি একটি স্ট্যান্ডার্ড তালিকায় সংরক্ষণ করে। প্রতিটি তালিকা এন্ট্রি ফাইল থেকে একটি লাইন।

আমি তখন নির্দিষ্ট লাইনগুলি খুঁজতে নিয়মিত-এক্সপ্রেশন দিয়ে তালিকাটি বিশ্লেষণ করি। লাইনগুলি থেকে প্রাপ্ত কিছু ডেটা / ফলাফলগুলিকে একটি নতুন বহুমাত্রিক তালিকায় রাখা দরকার; যেহেতু আমি জানি না যে আমি কতগুলি ফলাফল / ডেটা শেষ করব তাই আমি বহুমাত্রিক অ্যারে ব্যবহার করতে পারি না।

আমি যে ডেটাটি inোকাতে চাই তা এখানে:

তালিকা
(
    [0] => তালিকা
        (
            [0] => ট্র্যাক আইডি
            [1] => নাম
            [2] => শিল্পী
            [3] => অ্যালবাম
            [4] => খেলুন গণনা
            [5] => গণনা এড়িয়ে যান

        )
    [1] => তালিকা
        (
এবং তাই ....

বাস্তব উদাহরণ:

তালিকা
(
    [0] => তালিকা
        (
            [0] => 2349
            [1] => আপনার জীবনের প্রধান সময়
            [2] => ডাউট পাঙ্ক
            [3] => সর্বোপরি মানব
            [4] => 3
            [5] => 2

        )
    [1] => তালিকা
        (

সুতরাং হ্যাঁ, তালিকাভুক্ত [0] [0] গান 1 থেকে ট্র্যাকআইডি, 2 টি গানের তালিকা থেকে [1] [0] পাবেন ID

তবে বহুমাত্রিক তালিকা তৈরি করতে আমার প্রচুর সমস্যা হচ্ছে। এখন পর্যন্ত আমি সাথে এসেছি

List<List<string>> matrix = new List<List<string>>();

তবে আমার আসলে বেশি অগ্রগতি হয়নি :(

উত্তর:


140

ঠিক আছে আপনি যেখানে লিখতে চান সেখানে অবশ্যই ব্যবহার করতে পারেন List<List<string>>:

List<string> track = new List<string>();
track.Add("2349");
track.Add("The Prime Time of Your Life");
// etc
matrix.Add(track);

তবে আপনি কেন ট্র্যাক আইডি, নাম, শিল্পী, অ্যালবাম, প্লে কাউন্ট এবং স্কিপ কাউন্টের বৈশিষ্ট্য সহ ট্র্যাক উপস্থাপনের জন্য নিজের শ্রেণি তৈরির পরিবর্তে তা করবেন? তারপর শুধু একটি আছে List<Track>


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

এছাড়াও, আমি অবশেষে কতগুলি ট্র্যাক তৈরি / সঞ্চয় করব তা জেনে রাখা দরকার হবে না?
ক্যাস্পারটি

4
না, কারণ << ট্র্যাক> তালিকাটি এখনও গতিশীল আকারের। আপনি একটি ট্র্যাকের জন্য ডেটা পার্স করতে পারবেন, ট্র্যাকের একটি নতুন উদাহরণ তৈরি করুন, তালিকায় এটি যুক্ত করুন <ট্র্যাক> এবং তারপরে পরবর্তীটি বিশ্লেষণ করুন
জন স্কিটি

ক্যাস্পার্ট, তালিকা <টি> এটি আপনার জন্য কী পরিমাণ বস্তু সঞ্চয় করে তা ট্র্যাক করে। আপনি কলিং তালিকা <টি> .Count দ্বারা পরিমাণ অ্যাক্সেস করতে পারেন
Spoike

4
@ ক্যাস্পারটি দয়া করে অনেকে Trackক্লাস তৈরির পরামর্শ দিয়েছেন এবং করুন । কোডটি বোঝা / বজায় রাখা আরও সহজ হবে। আপনি যদি স্ট্রিংয়ের তালিকা হিসাবে ট্র্যাকটিকে উপস্থাপন করেন তবে আপনি যেখানে কোনও নির্দিষ্ট অ্যাট্রিবিউট সংরক্ষণ করেন সেই অনিদ্রাগুলিকে আপনি যেখানে ট্র্যাকের তথ্য অ্যাক্সেস করার চেষ্টা করছেন সে সব ক্ষেত্রে সিঙ্ক্রোনাইজ করতে হবে । এটি প্রতিটি সময় বাস্তবায়ন করা ক্লান্তিকর হয়ে উঠবে এবং ডিবাগ করা অসম্ভব হয়ে উঠবে। দয়া করে, নিজের স্বার্থে, ক্লাসগুলি দেখুন। :)
আলেকজান্ডার Kondratskiy

103

জোন স্কিট যেমন উল্লেখ করেছেন আপনি List<Track>তার পরিবর্তে এটি করতে পারেন । ট্র্যাক ক্লাসটি এরকম কিছু দেখবে:

public class Track {
    public int TrackID { get; set; }
    public string Name { get; set; }
    public string Artist { get; set; }
    public string Album { get; set; }
    public int PlayCount { get; set; }
    public int SkipCount { get; set; }
}

এবং একটি ট্র্যাক তালিকা তৈরি করতে List<Track>আপনি কেবল এটি করুন:

var trackList = new List<Track>();

ট্র্যাকগুলি যুক্ত করা এত সহজ হতে পারে:

trackList.add( new Track {
    TrackID = 1234,
    Name = "I'm Gonna Be (500 Miles)",
    Artist = "The Proclaimers",
    Album = "Finest",
    PlayCount = 10,
    SkipCount = 1
});

অ্যাক্সেসিং ট্র্যাকগুলি ইনডেক্সিং অপারেটরের মাধ্যমে করা যেতে পারে:

Track firstTrack = trackList[0];

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


4
আপনি যদি সত্যিই সচেতন হতে চান তবে ট্র্যাকও স্ট্রাক্ট হতে পারে। ;)
স্পোইক

4
আপনি যে সংজ্ঞা দিয়েছেন তার সাথে নয় ... স্ট্রাক্টের উদাহরণস্বরূপ 16 বাইট এর চেয়ে কম হওয়া উচিত ...
ইয়ান

@ আইয়ান: হুম। আমি এটা সম্পর্কে অবগত ছিল না। এর জন্য দ্রুত এমএসডিএন ডকটি পরীক্ষা করা হয়েছে এবং এটির স্ট্রাক্টগুলি 16 বাইটের চেয়ে কম হওয়া দরকার। এটা ইশারা জন্য ধন্যবাদ।
স্পোকাইক

14
তারা না প্রয়োজন হবে, এটি শুধু একটি সুপারিশ আছে। আসলেই এতো কিছু আসে যায় না; কাঠামো চয়ন করুন যদি আপনার মূল্য শব্দার্থ প্রয়োজন হয় অন্যথায় কেবল শ্রেণি। যদি আপনি না জানেন তবে একটি ক্লাস ব্যবহার করুন।
জেসন

35

এটি করার সবচেয়ে সহজ উপায় এটি।

List<List<String>> matrix= new List<List<String>>(); //Creates new nested List
matrix.Add(new List<String>()); //Adds new sub List
matrix[0].Add("2349"); //Add values to the sub List at index 0
matrix[0].Add("The Prime of Your Life");
matrix[0].Add("Daft Punk");
matrix[0].Add("Human After All");
matrix[0].Add("3");
matrix[0].Add("2");

মান পুনরুদ্ধার করা আরও সহজ

string title = matrix[0][1]; //Retrieve value at index 1 from sub List at index 0

12

আরেকটি কাজ যা আমি প্রায় ব্যবহার করেছি ...

List<int []> itemIDs = new List<int[]>();

itemIDs.Add( new int[2] { 101, 202 } );

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

প্রোগ্রামার কেবল 2 টি আইটেম অ্যারে প্রবেশ করে নির্ভর করে তবে এটি কোনও সাধারণ আইটেম না বলে আমি মনে করি এটি কাজ করে।


2

আপনিও পারেন .. এইভাবে,

List<List<Object>> Parent=new  List<List<Object>>();

List<Object> Child=new List<Object>();
child.Add(2349);
child.Add("Daft Punk");
child.Add("Human");
.
.
Parent.Add(child);

আপনার যদি অন্য আইটেম (শিশু) প্রয়োজন হয় তবে সন্তানের একটি নতুন উদাহরণ তৈরি করুন,

Child=new List<Object>();
child.Add(2323);
child.Add("asds");
child.Add("jshds");
.
.
Parent.Add(child);

2

এটি কীভাবে 2 মাত্রিক তালিকা তৈরি করবেন is

        // Generating lists in a loop.
        List<List<string>> biglist = new List<List<string>>();

        for(int i = 1; i <= 10; i++)
        {
            List<string> list1 = new List<string>();
            biglist.Add(list1);
        }

        // Populating the lists
        for (int i = 0; i < 10; i++)
        {
            for(int j = 0; j < 10; j++)
            {
                biglist[i].Add((i).ToString() + " " + j.ToString());
            }
        }

        textbox1.Text = biglist[5][9] + "\n";

জনবহুল নয় এমন কোনও স্থানে অ্যাক্সেসের বিপদ সম্পর্কে সচেতন হন।


1

আমি ব্যবহার করতাম:

List<List<String>> List1 = new List<List<String>>
var List<int> = new List<int>();
List.add("Test");
List.add("Test2");
List1.add(List);
var List<int> = new List<int>();
List.add("Test3");
List1.add(List);

যে সমান:

List1
(
[0] => List2 // List1[0][x]
    (
        [0] => Test  // List[0][0] etc.
        [1] => Test2

    )
[1] => List2
    (
        [0] => Test3

0

আপনি ডেটা টেবিলও ব্যবহার করতে পারেন - আপনি কলামগুলি এবং তার ধরণের সংখ্যা নির্ধারণ করতে পারেন এবং তারপরে সারি যুক্ত করতে পারেন http://www.dotnetperls.com/datatable


List<Track>পদ্ধতির সাথে দৃ stick BindingSource়ভাবে আঁকুন এবং একটি ব্যবহার করুন , কোডটিতে দৃ strongly়ভাবে টাইপ করা ক্লাসগুলিকে সমর্থন করার জন্য এবং ডেটা গ্রিড ভিউয়ের মধ্যে ট্র্যাকগুলির ভিজ্যুয়ালাইজেশনকে সহজ কনফিগার করার জন্য আপনার DataGridViewপ্রকারে Trackএকটি ডেটা সোর্স যুক্ত করে একটি ব্যবহার করুন।
অলিভার

সম্মত, কিন্তু কখনও কখনও আপনি তাত্ক্ষণিকভাবে ডেটা প্রদর্শন করতে চান না এবং আপনি কেবল একটি জায়গায় এটি ব্যবহার করার জন্য আরও একটি ক্লাস তৈরি করতে চান না তাই আমি একটি বিদ্যমান সমাধান ব্যবহার করতে পছন্দ করি। ... এটি সমাধানের জন্য আরও একটি উপায় তুলে ধরতে চেয়েছিলাম! ;)
Val,

0

আমি যে গেম ইঞ্জিনটিতে কাজ করছি তার জন্য কিছুক্ষণ আগে এটি তৈরি করা হয়েছিল। এটি স্থানীয় অবজেক্ট ভেরিয়েবল হোল্ডার হিসাবে ব্যবহৃত হয়েছিল। মূলত, আপনি এটি একটি সাধারণ তালিকা হিসাবে ব্যবহার করেন তবে এটি স্ট্রিংয়ের নাম (বা আইডি) এর অবস্থানের স্থানে থাকে। কিছুটা পরিবর্তন, এবং আপনার 2D তালিকা থাকবে।

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace GameEngineInterpreter
{
    public class VariableList<T>
    {
        private List<string> list1;
        private List<T> list2;

        /// <summary>
        /// Initialize a new Variable List
        /// </summary>
        public VariableList()
        {
            list1 = new List<string>();
            list2 = new List<T>();
        }

        /// <summary>
        /// Set the value of a variable. If the variable does not exist, then it is created
        /// </summary>
        /// <param name="variable">Name or ID of the variable</param>
        /// <param name="value">The value of the variable</param>
        public void Set(string variable, T value)
        {
            if (!list1.Contains(variable))
            {
                list1.Add(variable);
                list2.Add(value);
            }
            else
            {
                list2[list1.IndexOf(variable)] = value;
            }
        }

        /// <summary>
        /// Remove the variable if it exists
        /// </summary>
        /// <param name="variable">Name or ID of the variable</param>
        public void Remove(string variable)
        {
            if (list1.Contains(variable))
            {
                list2.RemoveAt(list1.IndexOf(variable));
                list1.RemoveAt(list1.IndexOf(variable));
            }
        }

        /// <summary>
        /// Clears the variable list
        /// </summary>
        public void Clear()
        {
            list1.Clear();
            list2.Clear();
        }

        /// <summary>
        /// Get the value of the variable if it exists
        /// </summary>
        /// <param name="variable">Name or ID of the variable</param>
        /// <returns>Value</returns>
        public T Get(string variable)
        {
            if (list1.Contains(variable))
            {
                return (list2[list1.IndexOf(variable)]);
            }
            else
            {
                return default(T);
            }
        }

        /// <summary>
        /// Get a string list of all the variables 
        /// </summary>
        /// <returns>List string</string></returns>
        public List<string> GetList()
        {
            return (list1);
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.