আপনি মান দ্বারা একটি অভিধান কিভাবে সাজান না?

I often have to sort a dictionary, consisting of keys & values, by value. For example, I have a hash of words and respective frequencies, that I want to order by frequency.

একটি সাজানো তালিকা যা একটি একক মান (ফ্রিকোয়েন্সি) বলে ভাল যে, আমি এটি শব্দটি আবার মানচিত্র করতে চাই।

SortedDictionary orders by key, not value. Some resort to a custom class, but is there a cleaner way?

0
যোগ সম্পাদিত
মতামত: 1
পাশাপাশি অভিধানটি শ্রেণীভুক্ত করা থেকে (গ্রহণযোগ্য উত্তর হিসেবে), আপনি একটি আইকম্পেরার তৈরি করতে পারেন যা কৌতুক (সত্য যে এটি তুলনা করার জন্য একটি কী স্বীকার করে, কিন্তু একটি কী দিয়ে, আপনি পেতে পারেন একটি মান). ;-)
যোগ লেখক BrainSlugs83, উৎস

17 উত্তর

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

হয়তো এই সাহায্য করে: http://bytes.com/forum/thread563638.html জন টিমনি থেকে অনুলিপি / পেস্ট করা:

Dictionary s = new Dictionary();
s.Add("1", "a Item");
s.Add("2", "c Item");
s.Add("3", "b Item");

List> myList = new List>(s);
myList.Sort(
    delegate(KeyValuePair firstPair,
    KeyValuePair nextPair)
    {
        return firstPair.Value.CompareTo(nextPair.Value);
    }
);
0
যোগ
stringnextPair -> স্ট্রিং> পরবর্তীপাঠ স্ট্রিংফার্সপায়ার -> স্ট্রিং> প্রথমপ্যার
যোগ লেখক Art, উৎস
পারফেক্ট অ- Linq সমাধান। এটা কখনও কখনও এটি সমস্যা সমাধানের জন্য প্রয়োজন হয় না, এমনকি যখন Linq ব্যবহার করার প্রয়োজন বোধ কিভাবে আমাকে আশ্চর্য না ceases। C# 3 এর সাথে, আমি বিশ্বাস করি আপনি কেবল লেবেল্ডা ব্যবহার করে সাজানো সহজতর করতে পারেন: myList.Sort ((x, y) => x.value.CompareTo (y.Value));
যোগ লেখক RobinHood70, উৎস

চারপাশে দেখুন, এবং কিছু সি # 3.0 বৈশিষ্ট্য ব্যবহার করে আমরা এটি করতে পারি:

foreach (KeyValuePair item in keywordCounts.OrderBy(key=> key.Value))
{ 
    // do something with item.Key and item.Value
}

এই আমি দেখানো পরিষ্কার উপায় এবং হাশলিং হ্যাশ হ্যান্ডলিং উপায় অনুরূপ।

0
যোগ
এই সহজ ছিল। কিভাবে অন্য উপায় যেতে বিপরীত করা যেতে পারে?
যোগ লেখক Dan Hastings, উৎস
@AndriusNaru? Evi? Ius: যদি আপনি কোনও বস্তুর অভিধানে ফিরে যোগ করেন, আপনি অর্ডারটি নষ্ট করবেন, যেমন অভিধানগুলির নিশ্চয়তা নেই কোন নির্দিষ্ট ফ্যাশনে আদেশ দেওয়া হবে
যোগ লেখক O. R. Mapper, উৎস
এই সিনট্যাক্স ব্যবহার করার সময় System.Linq নামস্থান যোগ করতে ভুলবেন না।
যোগ লেখক M. Dudley, উৎস
(KeyValuePair <�স্ট্রিং, int> আইটেমে keywordCounts.OrderBy (key => key.value) আইটেমটি নির্বাচন করুন) .অওকটিভেশন (t => t.key, t => t.value) - শুধু আপনার উত্তর একটি ছোট উপরন্তু :) ধন্যবাদ, btw :)
যোগ লেখক Andrius Naruševičius, উৎস
আমি কম্বোবক্সে KeyValuePairs যোগ করার সময় একটি অভিধান সাজানোর চেষ্টা করছিলাম ... এই কাজটি দুর্দান্ত! ধন্যবাদ!
যোগ লেখক Jason Down, উৎস

ব্যবহার করুন:

using System.Linq.Enumerable;
...
List> myList = aDictionary.ToList();

myList.Sort(
    delegate(KeyValuePair pair1,
    KeyValuePair pair2)
    {
        return pair1.Value.CompareTo(pair2.Value);
    }
);

Since you're targeting .NET 2.0 or above, you can simplify this into lambda syntax -- it's equivalent, but shorter. If you're targeting .NET 2.0 you can only use this syntax if you're using the compiler from Visual Studio 2008 (or above).

var myList = aDictionary.ToList();

myList.Sort((pair1,pair2) => pair1.Value.CompareTo(pair2.Value));
0
যোগ
এটা এক মাছ ধরার নৌকা - আপনি ব্রেসিস প্রয়োজন নেই। এটি myList.Sort ((x, y) => x.value.CompareTo (y.Value)) হিসাবে পুনরাবৃত্ত হতে পারে;
যোগ লেখক Arnis Lapsa, উৎস
আমি আপনাকে স্কিইট সম্পর্কে উল্লেখ করতে পারি stackoverflow.com/a/2705623/41211
যোগ লেখক GONeale, উৎস
দুঃখিত কিন্তু এই উত্তরটি বোঝা কঠিন ছিল যেমন delegate keyword (vb এর ভিন্ন হতে পারে) সাথে পরিচিত নয়, এটি স্পষ্ট নয় যেখানে সাজানোটি ঘটছে যা আপনি আইটেমের সংখ্যা দ্বারা সংখ্যাযুক্ত সংখ্যাটি চালানোর প্রয়োজন (আইটেমের কোনও স্কোয়ারেড নেই) প্রত্যেকটি উপাদানকে প্রতিটি উপাদানের জন্য পুরো অভিধানে অনুসন্ধান / তুলনা করে তুলনা করুন, অথবা যদি আপনি কেবলমাত্র বর্তমান n এর মধ্যে তুলনা করছেন তবে আপনি সংগ্রহের উপর একাধিক লুপের মধ্যে এটি করতে চান, যা আমি কেন এটি 'পেতে এটি' না হয়। সম্ভবত আরও তথ্যের জন্য যেখানে সাজানো এন পুনর্বিন্যাস ঘটছে তা সহায়ক হয়ে উঠছে!
যোগ লেখক Erx_VB.NExT.Coder, উৎস
কিভাবে সাজানো পদ্ধতিতে এই প্রতিনিধি বিবৃতি VB.NET চেহারা হবে?
যোগ লেখক Jonas Axelsson, উৎস
আপনি বলছেন এইটি জালিয়াতি করাতে waaaay - একটি অভিধান ইতিমধ্যেই IEnumerable প্রয়োগ করে, তাই আপনি এই ধরনের একটি সাজানো তালিকা পেতে পারেন: var mySortedList = myDictionary.OrderBy (d => d.value)। ToList ();
যোগ লেখক BrainSlugs83, উৎস
আমি এই সমাধানটি ব্যবহার করেছি (ধন্যবাদ!) কিন্তু মাইকেল স্টামের পোস্ট পড়ে (এবং তার জন টেমনি থেকে তার কোড স্নিপেট) পড়ার এক মিনিট পর্যন্ত বিভ্রান্ত হয়েছিল এবং বুঝতে পেরেছিলাম যে MyList একটি মাধ্যমিক বস্তু, কীউয়ালপাওয়ারগুলির তালিকা, যা অভিধান থেকে তৈরি করা হয়েছে, এবং তারপর সাজানো।
যোগ লেখক Robin Bennett, উৎস
আমি এই দুই বছর পরে জানি ... কিন্তু আমি এই আগের মন্তব্য পরিবর্তনের কেউ সাহায্য করতে পারে নিশ্চিত করছি: myList.Sort (ফাংশন (প্রথম পিতা Keyword হিসাবে স্ট্রিং, স্ট্রিং এর), পরবর্তীপরিবর্তন KeyValuePair (স্ট্রিং, স্ট্রিং এর )) প্রথম পয়সা। ভ্যালু.কম্প্পের্টো (পরবর্তী পেয়ার.ভালু))
যোগ লেখক sacredfaith, উৎস
সাজানো সাজানোর সাজানোর জন্য x এবং y এর সাথে তুলনা করুন: myList.Sort ((x, y) => y.value.CompareTo (x.value));
যোগ লেখক Arturo, উৎস
আমি এটা এটি ToList এক্সটেনশান পদ্ধতি জন্য Linq প্রয়োজন যে লক্ষনীয় মূল্য মনে করি।
যোগ লেখক Ben, উৎস

LINQ ব্যবহার করুন:

Dictionary myDict = new Dictionary();
myDict.Add("one", 1);
myDict.Add("four", 4);
myDict.Add("two", 2);
myDict.Add("three", 3);

var sortedDict = from entry in myDict orderby entry.Value ascending select entry;

এটি এমন চমৎকার লিক্যবিলিটির জন্যও অনুমতি দেবে যে আপনি উপরের 10, 20 10%, ইত্যাদি নির্বাচন করতে পারেন। অথবা যদি আপনি টাইপ-অগ্রের এর জন্য আপনার শব্দ ফ্রিকোয়েন্সি সূচক ব্যবহার করছেন, তাহলে আপনি সাথে সাথেই শুরু হয়

0
যোগ
এর সমস্ত পরামর্শ উপেক্ষা করুন দয়া করে। </ Code> - স্ট্যান্ডার্ড অভিধানগুলি একটি সাজানোর আদেশের নিশ্চয়তা দেয় না
যোগ লেখক AlexFoxGill, উৎস
যারা ব্যবহার করছেন তাদের জন্য .NET 2.0 - আপনি কি ফাঁক পূরণ করতে LINQBridge ব্যবহার করার চেষ্টা করেছেন? albahari.com/nutshell/linqbridge.aspx
যোগ লেখক jocull, উৎস
@BorisB। আমি সংস্করণ সংশোধন ফিরে ঘূর্ণিত। আপনি খুব করতে পারেন। কেউ যাতে একটি ভাল জায়গা করতে সম্পাদনা করতে পারেন। সকলের জন্য, ToDictionary এই সমস্যাটির সঠিক উত্তর নয় এবং ক্যারাডেনের মূল উত্তরটি ছিল না। শুভ আপগ্রেড এবং অ-ডাউনভোটিং
যোগ লেখক nawfal, উৎস
গ্রেট উত্তর। এবং, অন্যান্য উত্তর অন্যান্য মন্তব্য উল্লিখিত হিসাবে, "system.Linq ব্যবহার করে;" ফাইলের শীর্ষে অন্যথায় আপনি কিছুটা বিভ্রান্তিমূলক ত্রুটির বার্তা পাবেন এবং IntelliSense সাহায্য করবেন না।
যোগ লেখক Mark Meuer, উৎস
রিটার্ন টাইপটি অবশ্যই IEnumerable > বা OrderedDictionary এ থাকা উচিত। অথবা শুরু থেকে একটি সাজানো অংকন ব্যবহার করা উচিত। একটি সাধারণ <�কোড> অভিধান </ কোড> জন্য MSDN স্পষ্টভাবে বলে যে "আইটেম যা ফেরত দেওয়া হয় তা অনির্ধারিত।" মনে হচ্ছে @ রাথোস 42 এর সর্বশেষ সম্পাদনাটি দোষারোপ করা হয়। :)
যোগ লেখক Boris B., উৎস
আমি কিভাবে একটি অভিধান <�স্ট্রিং, int> ফিরে সাজানো পরিবর্তন করতে পারেন? এখানে একটি নতুন SO প্রশ্ন পোস্ট করা হয়েছে: stackoverflow.com/questions/3066182/…
যোগ লেখক Kache, উৎস
দুর্ভাগ্যবশত এটি ভয়েস ২005 তে কাজ করে না কারণ .net ফ্রেমওয়ার্ক 2.0 সেখানে (কোন LINQ)। এটি বাামব্রিকের উত্তরও ভাল।
যোগ লেখক Smalcat, উৎস
আমি নিশ্চিত নই যে এটি সর্বদা কাজ করে কারণ অভিধানে পুনরাবৃত্তির ফলে এটির নিশ্চয়তা নেই যে মূল ভ্যালু প্যারেসগুলি "টানা হয়েছে" একই ক্রমে তারা ঢোকানো হয়েছে। সুতরাং, আপনি LINQ দ্বারা আদেশ দ্বারা ব্যবহার করলে এটি কোন ব্যাপার না কারণ অভিধানটি ঢোকানো উপাদানগুলির ক্রম পরিবর্তন করতে পারে। এটা সাধারণত প্রত্যাশিত হিসাবে কাজ করে কিন্তু কোন গ্যারান্টি নেই, বিশেষ করে বড় অভিধানগুলির জন্য
যোগ লেখক Bozydar Sobczak, উৎস
আমি অন্য শীর্ষস্থানীয় উত্তর (একটি <�কোড> স্টপওয়াচ() ব্যবহার করে) এর সাথে এটি করার জন্য একটি সহজ পদ্ধতি ব্যবহার করেছি এবং LINQ ব্যবহার করে প্রায় 350% সময়ের সাথে বাড়িয়েছিলাম । চার (!) সদস্য তালিকা অন্য পদ্ধতি ব্যবহার করে সাজানো = 0.0039511 সেকেন্ড; (একই) LINQ পদ্ধতি = 0.0130195 সেকেন্ড ব্যবহার করে সাজানো চার সদস্য তালিকা।
যোগ লেখক mbrownnyc, উৎস
var ordered = dict.OrderBy(x => x.Value);
0
যোগ
যোগ লেখক AlexFoxGill, উৎস
4.5 কাঠামো ব্যবহার করে, এটি যাচাই করা হয়েছে যে এটি না অভিধানে একটি কাস্ট করা প্রয়োজন।
যোগ লেখক Jagd, উৎস
আমি নিশ্চিত নই কেন এই সমাধান আরো জনপ্রিয় হয় না - সম্ভবত এটি .NET 3.5 প্রয়োজন হলে?
যোগ লেখক Contango, উৎস
কারন এটি অভিধানে ফিরে একটি ঢালের প্রয়োজন যা সবসময় সরল না হয় ...
যোগ লেখক MoonKnight, উৎস
@ জিরজ একটি সাজানো বাছাই আইটেমগুলিকে একটি অভিধানের মধ্যে রেখে তারপর কি নিশ্চিত অর্ডার? এটা আজ কাজ করতে পারে, কিন্তু এটা নিশ্চিত না।
যোগ লেখক nawfal, উৎস
এটি একটি ভাল সমাধান, কিন্তু এটি শেষ আধা-কোলন আগে এই অধিকার থাকা উচিত: .অন্যান্যসাধারণ (pair => pair.Key, pair => pair.value);
যোগ লেখক theJerm, উৎস
আমি এই এক, পরিষ্কার এবং সহজ পছন্দ। @ গ্রিভিটাস: আমি সম্মত, এবং ফ্রেমওয়ার্ক সংস্করণটি OP তে উল্লেখ করা হয়নি।
যোগ লেখক Andreas, উৎস
একটি অভিধানে ঢালাই করা উচিত নয় কারণ অভিধানগুলি নির্দেশ করা হয় না। কোন গ্যারান্টি নেই KeyValuePairs আপনি চান ক্রম থাকতে হবে।
যোগ লেখক David DeMar, উৎস

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

0
যোগ
@recursive যেকোন অভিধানকে উসুল করা উচিত। মনে রাখবেন যে আমার উত্তর, যা সঠিক, কিন্তু অসম্পূর্ণ (ভাল উদাহরণগুলি কি হতে পারে) একটি অবৈধ উত্তরের নিচে ভোট দেওয়া হয় যা মূল অভিধানের ডুপ্লিকেট মানগুলিতে ব্যতিক্রম হবে (কীগুলি অনন্য, মানগুলি নিশ্চিত নয় হতে)
যোগ লেখক Roger Willcocks, উৎস
একটি সাজানো অভিধান মূল-মূল্য জোড়া তালিকা প্রকাশ করতে পারে যদিও।
যোগ লেখক recursive, উৎস
এই Bes উত্তর, কারণ অভিধান না sortable হয় এটি কীস কেটেছে এবং আপনি এটিকে একটি অত্যন্ত দ্রুত অনুসন্ধানের কাজ করতে পারেন।
যোগ লেখক Paulius Zaliaduonis, উৎস

আপনি মান দ্বারা একটি অভিধান বাছাই করতে পারেন এবং নিজে নিজেই এটি সংরক্ষণ করতে পারেন (যাতে আপনি যখন এটি অগ্রাহ্য করে মূল্যগুলি ক্রম অনুসারে আসে):

dict = dict.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);

নিশ্চিত, এটি সঠিক নাও হতে পারে, কিন্তু এটি কাজ করে।

0
যোগ
যোগ লেখক AlexFoxGill, উৎস
আমি মনে করি এটি কাজ করবে, আইটেম একই সময়ে অভিধান যোগ করা হলে এবং কিছুই মুছে ফেলা / সংশোধন করা হয়। কোনও প্রমাণ আছে যে .নেট কি অভিধানে পুনর্নির্দিষ্ট আইটেমগুলি পাবেন?
যোগ লেখক AaA, উৎস
অভিধান আউটপুট কোনো নির্দিষ্ট সাজানোর অর্ডার আছে নিশ্চিত করা হয় না।
যোগ লেখক Roger Willcocks, উৎস
এই "কাজ" নিশ্চিত করা হয় না। এটি একটি বাস্তবায়ন বিস্তারিত। এটি অন্য সময় কাজ করতে হবে না। ভুল উত্তর, downvoted।
যোগ লেখক nawfal, উৎস
আমি উত্পাদন কোড এই দেখতে দেখতে খুব উদ্বিগ্ন হবে। এটা নিশ্চিত করা হয় না এবং যে কোনো সময় পরিবর্তন করতে পারে। না যে আমি প্রগম্যাটিক সমাধানগুলি থেকে দূরে সরে যাই, এটি শুধু ডেটা স্টোরেজ বোঝার অভাব প্রদর্শন করে।
যোগ লেখক jamespconnor, উৎস
আপনি একটি সাজানো তালিকায় বাছাই করতে চান তাহলে OrderByDescending ব্যবহার করতে পারেন।
যোগ লেখক Mendokusai, উৎস
আমার জন্য কাজ করা হলেও, আমি এটি থেকে সামান্য পরিবর্তন করতে হয়েছিল: অভিধানটি dict = dict.OrderBy (x => x.value) .অধিকার (x => x.key, x => x.value);
যোগ লেখক Josh, উৎস

আপনি একটি অভিধান আছে আপনি একটি মাছ ধরার নৌকা নীচের ব্যবহার করে মান সরাসরি তাদের সাজান করতে পারেন:

var x = (from c in dict orderby c.Value.Order ascending select c).ToDictionary(c => c.Key, c=>c.Value);
0
যোগ
যোগ লেখক O. R. Mapper, উৎস

VB.NET ব্যবহার করে একটি ListView নিয়ন্ত্রণের মধ্যে একটি সাজানো সাজানো তালিকা তালিকাটি সাজানো হচ্ছে:

Dim MyDictionary As SortedDictionary(Of String, MyDictionaryEntry)

MyDictionaryListView.ItemsSource = MyDictionary.Values.OrderByDescending(Function(entry) entry.MyValue)

Public Class MyDictionaryEntry ' Need Property for GridViewColumn DisplayMemberBinding
    Public Property MyString As String
    Public Property MyValue As Integer
End Class

XAML:


    
        
            
            
         
    

0
যোগ

The other answers are good, if you all you want is to have a "temporary" list sorted by Value. However, if you want to have a dictionary sorted by Key that automatically synchronizes with another dictionary that is sorted by Value, you could use the Bijection class.

Bijection allows you to initialize the collection with two existing dictionaries, so if you want one of them to be unsorted, and you want the other one to be sorted, you could create your bijection with code like

var dict = new Bijection(new Dictionary(), 
                               new SortedDictionary());

You can use dict like any normal dictionary (it implements IDictionary<>), and then call dict.Inverse to get the "inverse" dictionary which is sorted by Value.

Bijection is part of Loyc.Collections.dll, but if you want, you could simply copy the source code into your own project.

Note: In case there are multiple keys with the same value, you can't use Bijection, but you could manually synchronize between an ordinary Dictionary and a BMultiMap.

0
যোগ
http://stackoverflow.com/questions/268321 এর অনুরূপ কিন্তু সাজানো ডিজিটের সাথে প্রতি অভিধান প্রতিস্থাপন করতে পারে। যদিও উত্তরগুলি নকল মানগুলি সমর্থন করে না (অনুমান 1 থেকে 1)।
যোগ লেখক crokusek, উৎস

বা মজা করার জন্য আপনি কিছু LINQ এক্সটেনশন ভালতা ব্যবহার করতে পারেন:

var dictionary = new Dictionary { { "c", 3 }, { "a", 1 }, { "b", 2 } };
dictionary.OrderBy(x => x.Value)
  .ForEach(x => Console.WriteLine("{0}={1}", x.Key,x.Value));
0
যোগ

সাজানো মান

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

অর্ডার বাই ক্লজ প্রোগ্রাম যে ধরণের অভিধান [C #]

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

class Program
{
    static void Main()
    {
        // Example dictionary.
        var dictionary = new Dictionary(5);
        dictionary.Add("cat", 1);
        dictionary.Add("dog", 0);
        dictionary.Add("mouse", 5);
        dictionary.Add("eel", 3);
        dictionary.Add("programmer", 2);

        // Order by values.
        // ... Use LINQ to specify sorting by value.
        var items = from pair in dictionary
                orderby pair.Value ascending
                select pair;

        // Display results.
        foreach (KeyValuePair pair in items)
        {
            Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
        }

        // Reverse sort.
        // ... Can be looped over in the same way as above.
        items = from pair in dictionary
        orderby pair.Value descending
        select pair;
    }
}

আউটপুট

dog: 0
cat: 1
programmer: 2
eel: 3
mouse: 5
0
যোগ

আপনি অভিধানে এন্ট্রিগুলি সরাবেন না এনএইচটি অভিধানে শ্রেণীবিন্যাস একটি হ্যাশটেবল হিসাবে প্রয়োগ করা হয় - এই ডেটা কাঠামোটি সংজ্ঞা অনুসারে সাজানো হয় না।

যদি আপনি আপনার সংগ্রহে (কী দ্বারা) পুনরাবৃত্তি করতে সক্ষম হতে হবে - আপনি SortedDictionary ব্যবহার করতে হবে, যা একটি বাইনারি অনুসন্ধান বৃক্ষ হিসাবে প্রয়োগ করা হয়।

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

আমি বুঝতে পারি না যে কেন আপনি আপনার মূল / প্রথম অভিধানে মূল আইটেমের একটি লিঙ্ক বজায় রাখার জন্য জোর দেন।

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

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

আপনি কিছু চেহারা আপ ভারী প্রক্রিয়াকরণ করতে যাচ্ছি উপরের উপরের সমস্ত শুধুমাত্র ন্যায্য। যদি শুধুমাত্র একবার তাদের ফ্রিকোয়েন্সি দ্বারা সাজানো আউটপুট প্রয়োজন আপনি তারপর (বেনামী) tuples একটি তালিকা উত্পাদন করতে পারে:

var dict = new SortedDictionary();
// ToDo: populate dict

var output = dict.OrderBy(e => e.Value).Select(e => new {frequency = e.Value, word = e.Key}).ToList();

foreach (var entry in output)
{
    Console.WriteLine("frequency:{0}, word: {1}",entry.frequency,entry.word);
}
0
যোগ

একটি সাজানো অভিধান পাওয়ার সবচেয়ে সহজ উপায় হচ্ছে সাজানো হয়েছে শ্রেণীতে নির্মিত ব্যবহার করা হয়:

//Sorts sections according to the key value stored on "sections" unsorted dictionary, which is passed as a constructor argument
System.Collections.Generic.SortedDictionary sortedSections = null;
if (sections != null)
{
    sortedSections = new SortedDictionary(sections);
}

sortedSections will contains the sorted version of sections

0
যোগ
@ এমব্রাউনেনিক - না, এরকম ভুমিকা বা পূর্বনির্ধারণের প্রয়োজন যা ভ্যালুগুলি অনন্য, যা নিশ্চিত নয়।
যোগ লেখক Roger Willcocks, উৎস
হিসাবে আপনি আপনার মন্তব্য উল্লেখ, <�কোড> SortedDictionary </ কোড> কি কি দ্বারা সাজানোর ওপ মান দ্বারা সাজানোর চায় সাজানো ডিটেনশন এই ক্ষেত্রে সাহায্য করে না।
যোগ লেখক Marty Neal, উৎস
ওয়েল ... যদি সে (আপনি) করতে পারেন, তাহলে কীগুলি কী হিসাবে কী সেট করে নিন। আমি অপারেশন শেষ এবং sorteddictionary() সর্বদা কমপক্ষে 1 মাইক্রোসেকেন্ড দ্বারা জিতেছি এবং এটি পরিচালনা করার জন্য এটি অনেক সহজ। 0 (এটি ইতিমধ্যেই একটি সাজানোর বৈষম্য </ কোড>))।
যোগ লেখক mbrownnyc, উৎস

আপনি মান দ্বারা অভিধান বাছাই করতে পারেন এবং ফলাফল নীচের কোড ব্যবহার করে অভিধানে পেতে পারেন:

Dictionary <> ShareUserNewCopy = 
       ShareUserCopy.OrderBy(x => x.Value).ToDictionary(pair => pair.Key,
                                                        pair => pair.Value);                                          
0
যোগ
এবং এই উত্তর যখন আপনি ইতিমধ্যে উত্তর দেওয়া হয়?
যোগ লেখক nawfal, উৎস
একটি অভিধানে সাজানো আইটেমগুলি সরিয়ে দিয়ে, তারা আর নতুন ডিকশনারিকে গণনা করে যখন তারা সাজানো হবে না।
যোগ লেখক Marty Neal, উৎস

ধরুন আমরা একটি অভিধান হিসাবে আছে

   Dictionary dict = new Dictionary();
   dict.Add(21,1041);
   dict.Add(213, 1021);
   dict.Add(45, 1081);
   dict.Add(54, 1091);
   dict.Add(3425, 1061);
   sict.Add(768, 1011);

1) আপনি হিসাবে মান সংরক্ষণ করতে অস্থায়ী অভিধান ব্যবহার করতে পারেন:

        Dictionary dctTemp = new Dictionary();

        foreach (KeyValuePair pair in dict.OrderBy(key => key.Value))
        {
            dctTemp .Add(pair.Key, pair.Value);
        }
0
যোগ
Dictionary dic= new Dictionary();
var ordered = dic.OrderBy(x => x.Value);
return ordered.ToDictionary(t => t.Key, t => t.Value);
0
যোগ
এছাড়াও ভুল এখানে দেখুন: stackoverflow.com/a/4007787/463828
যোগ লেখক Philipp M, উৎস