আমি কীভাবে জেনেরিক তালিকা ডিইএসসি এবং এএসসি বাছাই করতে পারি?


110

আমি কীভাবে জেনেরিক তালিকা ডিইএসসি এবং এএসসি বাছাই করতে পারি? লিনকুইয়ের সাথে এবং লিনকু ছাড়া? আমি VS2008 ব্যবহার করছি।

class Program
{
    static void Main(string[] args)
    {
        List<int> li = new List<int>();

        li.Add(456);
        li.Add(123);
        li.Add(12345667);
        li.Add(0);
        li.Add(1);

        li.Sort();

        foreach (int item in li)
        {
            Console.WriteLine(item.ToString() + "\n");
        }

        Console.ReadKey();
    }
}

উত্তর:


246

লিনকের সাথে

var ascendingOrder = li.OrderBy(i => i);
var descendingOrder = li.OrderByDescending(i => i);

লিনক ছাড়া

li.Sort((a, b) => a.CompareTo(b)); // ascending sort
li.Sort((a, b) => b.CompareTo(a)); // descending sort

নোট করুন যে লিনক ব্যতীত তালিকাটি নিজেই বাছাই করা হচ্ছে। লিনকের সাথে, আপনি তালিকার অর্ডারযোগ্য পরিমাণ মতো পাচ্ছেন তবে তালিকাটি নিজেই বদলেনি। আপনি যদি তালিকার পরিবর্তন করতে চান তবে আপনি লিনক পদ্ধতিতে কোনও রকম পরিবর্তন করবেন

li = li.OrderBy(i => i).ToList();

1
@ ছেয়ে যাওয়া যখন আপনি যদি মনে করেন যে অন্য কোনও ব্যবহারকারীর উত্তর ভুল আছে তবে আপনার মন্তব্য করা উচিত, ভোট দেওয়া উচিত এবং / অথবা আপনার যে উত্তরটি সঠিক বলে মনে হচ্ছে তা প্রদান করা উচিত, অন্য ব্যক্তির উত্তরটিকে সঠিক বলে মনে হচ্ছে তা সম্পাদনা করা নয়।
পরিবেশন করুন

24
আমি মনে করি যে অবতরণী আদেশের জন্য এটি এখানে ব্যবহৃত পদ্ধতির li.Sort((a, b) => b.CompareTo(a));চেয়ে বেশি স্পষ্ট -1*। আমি সেই অনুসারে উত্তরটি সম্পাদনা করেছি তবে @ সার্ভিস তা উল্টে দিয়েছে।
onedaywhen

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

5
নিবন্ধন করুন আপনি সম্পাদনা বর্ণিত যে কোনও জায়গায় এটি দেখতে পাবেন। সহায়তা কেন্দ্র থেকে, "কখন আমার পোস্টগুলি সম্পাদনা করা উচিত? [...] পোস্টটির অর্থ স্পষ্ট করতে (সেই অর্থ পরিবর্তন না করে)"
সার্ভি

4
বা ঠিক -a.CompareTo(b)
শিমি ওয়েটজ্যান্ডলার

72

লিনক ছাড়া:

আরোহী:

li.Sort();

নিম্নক্রম:

li.Sort();
li.Reverse();

Sort()এটি একটি শূন্য পদ্ধতি, সুতরাং আপনি Reverse()এই পদ্ধতিতে এটি চেইন করতে পারবেন না । আপনার জন্য 2 টি পৃথক অপারেশন দরকার হবে। যাইহোক, লিনকুইয়ের সাহায্যে আপনি এটি চেইন করতে পারেন OrderByতবে সেই সময়ে আপনার OrderByDescendingপরিবর্তে ব্যবহার করা উচিত ।
আহমাদ জুনে


3

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

li.Sort();
li.Reverse();

তবে আমার পরীক্ষার কেসগুলি সময়সীমা অতিক্রম করার জন্য ব্যর্থ হয়েছিল, সুতরাং নীচের সমাধানটি আমার পক্ষে কাজ করেছে: -

li.Sort((a, b) => b.CompareTo(a));

সুতরাং চূড়ান্তভাবে উপসংহারটি হ'ল অবতরণ ক্রমে তালিকার দ্বিতীয় শ্রেণীর পদ্ধতিটি পূর্বেরটির তুলনায় কিছুটা দ্রুত।


-3

অবতরণ ক্রমে int মানগুলির সাথে তালিকাটি সাজানোর খুব সহজ উপায়:

li.Sort((a,b)=> b-a);

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


4
এটি int.CompareTo(int)দরজার কারণ নয় isn't রেফারেন্সসোর্স.মাইক্রোসফট.কম এ উত্সটি দেখুন যা বলেছে: " তুলনাটি ব্যবহার করা দরকার কারণ বিয়োগটি খুব বড় নেং সংখ্যার জন্য ধনাত্মক হয়ে যাবে, ইত্যাদি "। আপনার যদি থাকে b = int.MinValueএবং a = 1(বলুন), এটি ব্যর্থ হবে। কখনও কখনও একটি পদ্ধতি কল এটি মূল্যবান।
ওয়াই হা লি

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