আমি অর্ডার করা অ্যারেতে নির্দেশাবলী অবজেক্টগুলিতে লিনকিউ ব্যবহার করি। অ্যারের ক্রম পরিবর্তন করা হয়নি তা নিশ্চিত হওয়ার জন্য কোন ক্রিয়াকলাপগুলি আমার করা উচিত নয়?
আমি অর্ডার করা অ্যারেতে নির্দেশাবলী অবজেক্টগুলিতে লিনকিউ ব্যবহার করি। অ্যারের ক্রম পরিবর্তন করা হয়নি তা নিশ্চিত হওয়ার জন্য কোন ক্রিয়াকলাপগুলি আমার করা উচিত নয়?
উত্তর:
আমি সিস্টেমের পদ্ধতিগুলি পরীক্ষা করেছি in ফলাফলের ক্রম কীভাবে উত্সের ক্রম থেকে পৃথক হবে তা নির্ধারণ করতে আমি প্রত্যেকটির মন্তব্য পরীক্ষা করে দেখেছি।
পুরোপুরি অর্ডার সংরক্ষণ করে। আপনি কোনও ফলাফলের উপাদানের সূচকে একটি উত্স উপাদান মানচিত্র করতে পারেন
অর্ডার সংরক্ষণ করে। উপাদানগুলি ফিল্টার বা যুক্ত করা হয় তবে পুনরায় অর্ডার দেওয়া হয় না।
অর্ডার নষ্ট করে - কোন আদেশে ফলাফল আশা করা যায় তা আমরা জানি না।
স্পষ্টভাবে আদেশ পুনরায় সংজ্ঞা করুন - ফলাফলের ক্রম পরিবর্তন করতে এগুলি ব্যবহার করুন
কিছু নিয়ম অনুসারে পুনরায় সংজ্ঞায়িত আদেশ।
সম্পাদনা: আমি এই প্রয়োগের উপর ভিত্তি করে ডিস্টিন্ট সংরক্ষণ সংরক্ষণে সরিয়ে নিয়েছি ।
private static IEnumerable<TSource> DistinctIterator<TSource>
(IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)
{
Set<TSource> set = new Set<TSource>(comparer);
foreach (TSource element in source)
if (set.Add(element)) yield return element;
}
Distinct
পদ্ধতির জন্য ) কেবলমাত্র "অপ্রত্যাশিত ক্রমে" নয়, "অরসেটেড" বলতে বোঝায়। আমি বলতে চাই Distinct
উপরের ফিল্টারিং বিভাগের অন্তর্ভুক্ত, ঠিক তেমন Where
।
আপনি কি আসলে এসকিউএল, বা অ্যারে সম্পর্কে কথা বলছেন? এটিকে অন্য উপায়ে বলতে কি আপনি লিনকিউ থেকে এসকিউএল বা লিনকিউ অবজেক্টে ব্যবহার করছেন?
অবজেক্ট অপারেটরগুলিকে লিনকিউ প্রকৃতপক্ষে তাদের মূল ডেটা উত্সটি পরিবর্তন করে না - তারা এমন সিকোয়েন্স তৈরি করে যা কার্যকরভাবে ডেটা উত্স দ্বারা সমর্থিত। কেবলমাত্র ক্রিয়াকলাপগুলি যা ক্রম পরিবর্তন করে সেগুলি হ'ল অর্ডারবাই / অর্ডারবাইডিসেন্ডিং / থটারবি / থ্রেটবাইডেসেন্ডিং - এবং তারপরেও সেগুলি সমান অর্ডারযুক্ত উপাদানগুলির জন্য স্থিতিশীল। অবশ্যই, অনেকগুলি ক্রিয়াকলাপ কিছু উপাদানগুলিকে ফিল্টার করে দেয় তবে যে উপাদানগুলি ফিরে আসে তা একই ক্রমে থাকবে।
আপনি যদি কোনও আলাদা ডেটা স্ট্রাকচারে রূপান্তর করেন, যেমন টলুকআপ বা টোডোরিয়ানের সাহায্যে, আমি বিশ্বাস করি না যে অর্ডারটি সেই সময়ে সংরক্ষণ করা হয়েছে - তবে এটি কিছুটা আলাদা। (একই কীতে মান ম্যাপিংয়ের ক্রমটি যদিও অনুসন্ধানের জন্য সংরক্ষণ করা হয়েছে), আমি বিশ্বাস করি)
GroupBy
অনুসরণ SelectMany
চাবি দ্বারা গ্রুপকৃত ফলাফল দেবে, কিন্তু না কী অর্ডার আরোহী মধ্যে ... এটা যে ক্রমে কী মূলত ঘটেছে তাদের দিতে হবে।
list<x> {a b c d e f g}
সি, ডি, ই সবার মধ্যে একই কী থাকে তবে ফলাফলের ক্রমটিতে সি, ডি, ই থাকবে এবং একে অপরের পাশে এবং ক্রমে সি, ডি, ই থাকবে। আমি এমএস-ভিত্তিক একটি শ্রেণিবদ্ধ উত্তর খুঁজে পাচ্ছি না।
আপনি যদি একটি অ্যারে নিয়ে কাজ করছেন তবে মনে হচ্ছে আপনি লিনকিউ-টু-অবজেক্টগুলি ব্যবহার করছেন, এসকিউএল নয়; আপনি কি নিশ্চিত? বেশিরভাগ লিনকিউ অপারেশনগুলি কোনও কিছুর পুনরায় অর্ডার দেয় না (আউটপুটটি ইনপুট হিসাবে একই ক্রমে হবে) - সুতরাং অন্য সাজানোর প্রয়োগ করবেন না (অর্ডারবাই [অবরোহক] / তারপরে [অবরুদ্ধ]]।
[সম্পাদনা করুন: জন যেমন আরও স্পষ্টভাবে বলেছেন; লিনকিউ মূল তথ্য একা রেখে সাধারণত একটি নতুন ক্রম তৈরি করে]
নোট করুন যে কোনও Dictionary<,>
(টুডে অভিধান) এ ডেটা চাপানো ডেটা স্ক্যাম্বল করবে, কারণ অভিধানটি কোনও নির্দিষ্ট সাজানোর ক্রমকে সম্মান করে না।
তবে সর্বাধিক সাধারণ জিনিসগুলি (নির্বাচন করুন, কোথায়, এড়িয়ে যান, নিন) ভাল হওয়া উচিত।
ToDictionary()
কেবল অর্ডার সম্পর্কে কোনও প্রতিশ্রুতি দেয় না, তবে বাস্তবে ইনপুট অর্ডার বজায় রাখে (যতক্ষণ না আপনি এটি থেকে কিছু সরিয়ে দেন)। আমি এটির উপর নির্ভর করতে বলছি না, তবে 'স্ক্র্যাম্বলিং' ভুল বলে মনে হচ্ছে।
আমি অনুরূপ একটি প্রশ্নে একটি দুর্দান্ত উত্তর পেয়েছি যা অফিসিয়াল ডকুমেন্টেশনের উল্লেখ করে। এটি উদ্ধৃত করার জন্য:
জন্য Enumerable
পদ্ধতি (বস্তু LINQ, যা প্রযোজ্য List<T>
), আপনি দ্বারা ফিরে উপাদানের ক্রম উপর নির্ভর করতে পারেন Select
, Where
অথবা GroupBy
। অন্তর্নিহিত পছন্দ মতো ToDictionary
বা আনর্ডারড এমন জিনিসগুলির ক্ষেত্রে এটি নয় Distinct
।
গণনাকারী থেকে.গ্রুপবাই ডকুমেন্টেশন থেকে :
IGrouping<TKey, TElement>
বস্তু উৎস উপাদান প্রতিটি প্রথম কী উত্পাদিত ক্রম উপর ভিত্তি করে একটি অনুক্রমে পাওয়া হয়IGrouping<TKey, TElement>
। একটি গোষ্ঠী উপাদান অর্ডার তারা প্রদর্শিত হল করছেsource
।
এটি IQueryable
এক্সটেনশন পদ্ধতির জন্য (অন্যান্য লিনকিউ সরবরাহকারী) প্রয়োজনীয়ভাবে সত্য নয় ।
উত্স: লিনকিউ এর উল্লেখযোগ্য পদ্ধতিগুলি উপাদানগুলির আপেক্ষিক ক্রম বজায় রাখে?
এখানে প্রশ্নটি বিশেষত LINQ-to-অবজেক্টগুলিকে উল্লেখ করছে।
আপনি যদি এর পরিবর্তে লিনিক্যু-টু এসকিউএল ব্যবহার করেন তবে কোনও আদেশ নেই যদি না আপনি যদি এমন কিছু দিয়ে চাপিয়ে দেন:
mysqlresult.OrderBy(e=>e.SomeColumn)
আপনি যদি লিনিক্যু-টু-এসকিউএল দিয়ে এটি না করেন তবে ফলাফলের ক্রম পরবর্তী প্রশ্নগুলির মধ্যে এমনকি একই ডেটাতেও পৃথক হতে পারে, যা একটি মধ্যবর্তী বাগের কারণ হতে পারে।