লিনকিউ কোন সমস্যার জন্য ডোমেন তৈরি?


12

প্রতিবার যখন আমি # # স্ট্যাক ওভারফ্লোতে সি # তে পোস্ট করা কোনও প্রশ্ন দেখি তখন কমপক্ষে একটি বা দুটি উত্তর পোস্ট করা দেখি যা লিনকিউতে কোনও সমস্যার সমাধান করে। সাধারণত খুব উচ্চ খ্যাতিযুক্ত ব্যক্তিরা লিনকিউকে পেশাদারদের মতো ব্যবহার করেন বলে মনে হয়।

সুতরাং আমার প্রশ্নটি হল, লিনকিউটি কোন সমস্যার জন্য ব্যবহার করার কথা?

পাশাপাশি নোটগুলি: কী কোনও উদ্দেশ্য রয়েছে যাতে এটি এড়ানো উচিত? ডেটাসেটের আকার লিনকিউ ক্যোয়ারীগুলির কার্যকারিতাকে প্রভাবিত করে?


2
এখানে শুরু করুন: কোড. msdn.microsoft.com/101-LINQ-Sample-3fb9811b
ওডেড


1
লিনকিউ হল অবজেক্ট গ্রাফগুলি অনুসন্ধান করার জন্য। এটি ল্যাঙ্গুয়েজ ইন্টিগ্রেটেড ক্যোয়ারী - এটি আপনাকে সংগ্রহগুলি অনুসন্ধান এবং পরিচালনা করতে মঞ্জুরি দেয়।
ওডে

1
এটি সম্ভবত একটি ক্লোজযোগ্য প্রশ্ন হিসাবে দাঁড়িয়ে আছে সেখানে একটি ভাল প্রশ্ন লুকিয়ে থাকতে পারে লিনক কী সমস্যাগুলির জন্য ভাল উপযুক্ত
জে কে।

1
লিনক ঘোষিত। এটি কীভাবে হয়েছে তা নির্দিষ্ট করে না দিয়ে আপনি "কী" চান তা উল্লেখ করেন। লিনকের জন্য এর অর্থ আপনি কী চান তা জানাতে একটি প্রশ্ন ব্যবহার করতে পারেন। কিছু সমস্যার জন্য ডিক্লারেটিভ কোডটি ছোট এবং সহজেই বোঝা যায়।
মাইকে 30

উত্তর:


16

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

foreach(var x in list) Console.WriteLine(x);

লিনকিউ ব্যবহারে আরও ভাল হওয়ার জন্য, এটি ব্যবহার করে অনুশীলন করুন।

প্রতিবার আপনি চলেছেন একটি লিখতে forবা foreachলুপ একটি সংগ্রহ স্টপ সঙ্গে কিছু করতে হবে, বিবেচনা যদি এটা LINQ (অর্থাত এটা শুধু উপাদানে একটি কর্ম / পার্শ্ব প্রতিক্রিয়া করণ না) একজন ভাল হইয়া, এবং যদি তাই হয় নিজেকে লিখতে বাধ্য এটি লিনকিউ ব্যবহার করে।

আপনি foreachপ্রথমে সংস্করণটি লিখতে পারেন তারপরে একটি লিনকুই সংস্করণে পুনরায় লিখতে পারেন।

যেমন সুইভ দেখায়, লিনিক্যু আপনার প্রোগ্রামটিকে আরও পঠনযোগ্য করে তোলা উচিত। এটি প্রক্রিয়াটির চেয়ে কোডের অভিপ্রায়কে জোর দেওয়ার দিকে ঝোঁক দেয় এটি সাধারণত এটি ভাল; তবে যদি আপনি খুঁজে পান যে আপনি আপনার প্রশ্নগুলি একটি সরল লুপের চেয়ে বেশি পঠনযোগ্য করতে না পারেন তবে লুপটির সাথে সংকোচ বোধ করবেন।

যদি অনুশীলনের জন্য আপনার অনুশীলনের প্রয়োজন হয় তবে বেশিরভাগ কার্যকরী প্রোগ্রামিং অনুশীলনগুলি লিনকুইতে 99 টি সমস্যা (বিশেষত প্রথম 20 বা ততোধিক ) বা প্রকল্পের ইউলারকে সুন্দরভাবে মানচিত্র করবে ।


আমার এখন এই প্রশ্নটি মুছতে হবে। মডারেটর মন্তব্য করেছেন যে এটি সম্প্রদায়ের পক্ষে উপযুক্ত নয় .. যদি আপনি অন্যথায় মনে করেন তবে দয়া করে আমাকে বলুন।
ব্যবহারকারী 1816120

1
আমি যুক্ত করব যে আপনি যদি এটি লিনকিউতে পুনরায় লিখেন এবং মূলটি এখনও আরও পঠনযোগ্য হয় তবে মূলটি রাখুন এবং লিনকিউ সংস্করণটি সরিয়ে দিন। কখনও কখনও, লিনকুই কেবল কিছু যোগ করে না।
সুইভ

থিওরিতে এসভিক হ্যাঁ, আমি নিশ্চিত নই যে আমি এর কোনও উদাহরণ সম্পর্কে ভাবতে পারি;)
জে কে।

1
@jk। উদাহরণস্বরূপ, রিশার্পার কখনও কখনও লিনকিউতে লুপটি রূপান্তর করার প্রস্তাব দেয় Aggregate()। আমার মনে হয় বেশিরভাগ সময় লুপটি বেশি পঠনযোগ্য।
এসভিক

@ এসভিক সম্ভবত আপনি কী অভ্যস্ত তা একটি ইস্যু, যদিও আমি স্বীকার করব যে সামগ্রিক ভাঁজ
জে কে

1

সম্পাদিত প্রশ্নের উত্তর দেওয়ার জন্য: সংক্ষেপে, যখনই আপনাকে "ক্যোয়ারী" কার্যকারিতা প্রয়োগ করতে হয় (লিনকুতে কিউ এর জন্য দাঁড়ায়) লিনকিউ ব্যবহার করা উপকারী। সঠিক ডোমেন নির্ধারণ করা কঠিন, তবে এটি সংগ্রহ থেকে ডেটা উত্তোলন এবং হেরফেরের সাথে সম্পর্কিত বিভিন্ন কাজকে ব্যাপকভাবে সরল করে।

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

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

Dictionary<string, List<string>> fileGroups = new Dictionary<string, List<string>>();

foreach (string file in Directory.GetFiles(Environment.CurrentDirectory))
{
    string extension = Path.GetExtension(file).ToLower();

    if (!fileGroups.ContainsKey(extension))
    {
        fileGroups[extension] = new List<string>();
    }

    fileGroups[extension].Add(file);
}

লিনকিউ সমতুল্য বিবেচনা করুন:

var query = from file in Directory.GetFiles(Environment.CurrentDirectory)
            group file by Path.GetExtension(file).ToLower();

খেয়াল করুন যে ক্যোয়ারীটি কেবলমাত্র 2 টি লাইন, অবশ্যই আমরা আসা যে কোনও প্রয়োজনীয় সমাধানের চেয়ে কম। এটিও বেশ পঠনযোগ্য; সংকেত-থেকে-শব্দ অনুপাতটি প্রথম সমাধানের চেয়ে বেশি higher লিনকিউতে নতুন যাঁরা, তাঁদের জন্য আপনি এই প্রশ্নেরটির ফলাফলগুলি নিম্নরূপ আউটপুট দিতে চাইবেন:

foreach (var fileGroup in query)
{
    Console.WriteLine(String.Format("*** Files with extension: {0}", group.Key));

    foreach (string file in fileGroup)
    {
        Console.WriteLine(file);
    }
}

আরও জটিল উদাহরণ সহ, পার্থক্যগুলি সাধারণত আরও বেশি বিস্তৃত হয় (উদাহরণস্বরূপ, একাধিক ক্ষেত্র দ্বারা কেবল গ্রুপিংয়ের বিষয়টি বিবেচনা করুন)। সুতরাং, সংক্ষেপে বলতে গেলে, লিনিকিউ অনেকগুলি "ডে টু ডেইন" ডেটা কোয়েরি সমস্যাগুলি এমনভাবে সমাধান করে যা প্রায়শই খাটো এবং আরও স্ব-বর্ণনামূলক হয়। এটি সিনট্যাক্স এবং প্রযুক্তি শেখার জন্য একটি হালকা ব্যয় করে আসে, তবে সুবিধাগুলি নেতিবাচকতার চেয়ে বেশি।


আপনি মানচিত্রকে শ্রেণিবদ্ধ করেন বা "ক্যোয়ারী" হিসাবে ভাঁজ করেন? আমি সত্যিই তা করি না তবে আমি অনুমান করি যে এটি আমি দেখতে পেয়েছি .. আমি সাধারণত একটি গণনার ফলাফল হিসাবে একটি সামগ্রিক কথা ভাবব, "কোয়েরি" নয়
জিমি হোফা

@ জিমিহোফা আমি বেশিরভাগই অন্তর্নিহিত সংগ্রহের জন্য গণনার প্রয়োগের কথা উল্লেখ করছি, অগত্যা গণনা নিজেই নয়। তবে আমার উপমাতে সম্ভবত ফাঁকির ছিদ্র রয়েছে, এটি 100% সঠিক না হয়ে চিত্রিত হতে বোঝায়।
ড্যানিয়েল বি

@JimmyHoffa কোন, কিন্তু তারপর আমি নিশ্চিত যদি কি একটি ক্যোয়ারী দিয়ে শুরু করতে হয় কঠোর সংজ্ঞা নেই নই
জে।

0

বিভিন্ন ধরণের ডেটা উত্সগুলির জন্য সময়ের সাথে সাথে বিভিন্ন ভাষা বিকাশ করা হয়েছে, উদাহরণস্বরূপ রিলেশনাল ডাটাবেসের জন্য এসকিউএল এবং এক্সএমএলের জন্য এক্সকিউয়ারি। অতএব, বিকাশকারীদের প্রতিটি ধরণের ডেটা উত্স বা ডেটা ফর্ম্যাটের জন্য একটি নতুন কোয়েরি ভাষা শিখতে হবে যা তাদের অবশ্যই সমর্থন করতে হবে। লিনকিউ বিভিন্ন ধরণের ডেটা উত্স এবং ফর্ম্যাটগুলিতে ডেটা নিয়ে কাজ করার জন্য একটি ধারাবাহিক মডেল সরবরাহ করে এই পরিস্থিতিকে সহজ করে তোলে। একটি লিনকিউ ক্যোয়ারিতে আপনি সর্বদা অবজেক্টের সাথে কাজ করছেন। আরও দেখার জন্য http://msdn.microsoft.com/en-us/library/bb397906.aspx


সংগ্রহের সাথে কাজ করার জন্য অবিকল লিনকিউ একটি বিমূর্ততা API। কিছু গুরুত্বপূর্ণ সুবিধা: সি # ব্যবহার করে আপনি স্ট্যাটিক পান! আপনার প্রশ্ন এবং রূপান্তরের যাচাইকরণ
AndreasScheinert
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.