আমি কীভাবে একটি অভিধানে কীগুলির তালিকা পেতে পারি?


152

আমি কেবল কীগুলিই চাই এবং কোনও অভিধানের মানগুলিও চাই না।

এটি করার জন্য আমি কোনও কোড পেতে সক্ষম হইনি। অন্য অ্যারে ব্যবহার করা প্রমাণিত হয়েছে যে আমি অপসারণও ব্যবহার করি তেমনি খুব বেশি কাজ।

কীভাবে আমি অভিধানে কীগুলির একটি তালিকা পেতে পারি?

উত্তর:


305
List<string> keyList = new List<string>(this.yourDictionary.Keys);

6
"এটি" ব্যবহার করা কি প্রয়োজনীয়?
জেরিওয়েল

15
@ জেরিগোয়েল না, এটি প্রয়োজনীয় নয়। এটি কেবল yourDictionaryফাংশন থেকে উদ্ভূত অবজেক্টের অংশ বা প্যারামিটারের নাম কিনা তা নিয়ে বিভ্রান্তি পরিষ্কার করতে ব্যবহার করা হয় ।
বিসিডিএন

1
আরও সম্পূর্ণ উত্তর হ'ল কী টাইপটিকে স্ট্রিং বলে ধরে নেওয়া উচিত নয়। var keyList = yourD dictionary.Keys.ToList (); অথবা আপনি বাদাম যেতে চান এবং var বা লিনক না ব্যবহার করতে চাইলে: - টাইপ করুন কী টাইপ = আপনারডায়াররিয়াস। গেটটাইপ ()। গেটজেনারিকআরগমেন্টস () [0]; প্রকারের তালিকা টাইপ = টাইপফ (তালিকা <>)। মেকগেনেরিক টাইপ (কী টাইপ); আইলিস্ট কীলিস্ট = (আইলিস্ট) অ্যাক্টিভেটর.ক্রেইটইনস্ট্যান্স (লিস্টটাইপ); keyList.AddRange (yourDictionary.Keys);
অ্যান্টনি বুথ

70

আপনি কেবল তাকান সক্ষম হতে হবে .Keys:

    Dictionary<string, int> data = new Dictionary<string, int>();
    data.Add("abc", 123);
    data.Add("def", 456);
    foreach (string key in data.Keys)
    {
        Console.WriteLine(key);
    }

2
এবং যদি আপনি লুপে কীগুলি সরিয়ে ফেলছেন?
মার্টিন ক্যাপোডিসি

5
@ মার্টিনকোপডিসি এর পরে আপনার সাধারণত প্রত্যাশা করা উচিত যে পুনরাবৃত্তকারীটি ভেঙে যেতে এবং চালিয়ে যেতে অস্বীকার করবেন
মার্ক গ্র্যাভেল

5
মার্ক, হ্যাঁ সেক্ষেত্রে আপনি অন্য উত্তরের মতো কিছু করবেন এবং একটি নতুন তালিকা তৈরি করবেন।
মার্টিন ক্যাপোডিসি

43

সমস্ত কীগুলির তালিকা পেতে

using System.Linq;
List<String> myKeys = myDict.Keys.ToList();

System.Linq .NET ফ্রেমওয়ার্ক 3.5 বা ততোধিক সংস্করণে সমর্থিত। আপনি যদি সিস্টেম.লিনক ব্যবহারে কোনও সমস্যার মুখোমুখি হন তবে নীচের লিঙ্কগুলি দেখুন

ভিজ্যুয়াল স্টুডিও সিস্টেমকে স্বীকৃতি দেয় না in

সিস্টেম.লিংক নেমস্পেস


13
দয়া করে ভুলে যাবেন না: using System.Linq;কোন উত্তরগুলি উপেক্ষা করবেন তা আমার জানতে হবে। দুঃখিত :)
বিটারব্লু

2
আপনাকে @ বিটারব্লু ধন্যবাদ। আমি বুঝতে পারি না যে .ToList()আমি যখন অন্য অনেকবার এটি ব্যবহার করেছিলাম তখন কেন একটি ত্রুটি ছুঁড়েছিল, তাই আমি এখানে উত্তর চেয়েছিলাম এবং আমি বুঝতে পারি যে আমি যে ফাইলটিতে কাজ করছি using System.Linq
ড্র্রু

1
কাজ করে না:Dictionary<string, object>.KeyCollection' does not contain a definition for 'ToList'
সাকরা

সত্যিই কাজ করে না। পরিবর্তে গৃহীত উত্তর ব্যবহার করুন।
আলেক

1
@ আলেক এটি দুর্দান্ত কাজ করে। আপনি সম্ভবত বিটলব্লু বা। নেট ফ্রেমওয়ার্কের সংস্করণ অনুসারে সিস্টেম.লিংক ব্যবহার করেন নি এটি সমর্থন করে না। এটি। নেট ফ্রেমওয়ার্ক 3.5 এ চালু হয়েছিল, এই লিঙ্কটি দেখুন । আমি এই পদ্ধতিটি ব্যবহার করার আগে System.Linq ব্যবহারের উত্তর আপডেট করছি।
प्रीহ্ম

12

মার্ক গ্র্যাভেলের উত্তরটি আপনার পক্ষে কাজ করা উচিত। myDictionary.Keysএকটি বস্তু ফেরৎ যে কার্যকরী ICollection<TKey>, IEnumerable<TKey>এবং তাদের অ জেনেরিক প্রতিরূপ।

আমি কেবল এটি যুক্ত করতে চেয়েছিলাম আপনি যদি মানটিও অ্যাক্সেস করার পরিকল্পনা করেন তবে আপনি অভিধানটির মাধ্যমে এটি লুপ করতে পারেন (পরিবর্তিত উদাহরণ):

Dictionary<string, int> data = new Dictionary<string, int>();
data.Add("abc", 123);
data.Add("def", 456);

foreach (KeyValuePair<string, int> item in data)
{
    Console.WriteLine(item.Key + ": " + item.Value);
}

3

প্রশ্নটি বুঝতে সমস্যাটি একটু জটিল তবে আমি অনুমান করছি যে সমস্যাটি হ'ল আপনি কীগুলি পুনরুক্তি করার সময় অভিধান থেকে উপাদানগুলি সরিয়ে দেওয়ার চেষ্টা করছেন। আমি মনে করি সেক্ষেত্রে আপনার কাছে দ্বিতীয় অ্যারে ব্যবহার করা ছাড়া বিকল্প নেই।

ArrayList lList = new ArrayList(lDict.Keys);
foreach (object lKey in lList)
{
  if (<your condition here>)
  {
    lDict.Remove(lKey);
  }
}

আপনি যদি অ্যারেলিস্টের পরিবর্তে জেনেরিক তালিকা এবং অভিধান ব্যবহার করতে পারেন তবে আমি করব, তবে উপরেরটি কেবল কাজ করা উচিত।


2

আমি এই সব গুলিয়ে দেওয়া উত্তরগুলিতে বিশ্বাস করতে পারি না। ধরে নেওয়া কীটি প্রকারের: স্ট্রিং (অথবা আপনি যদি অলস বিকাশকারী হন তবে 'ভার' ব্যবহার করুন): -

List<string> listOfKeys = theCollection.Keys.ToList();

আপনি কি বলতে চান এটি কাজ করে না? একটি অভিধানে কীগুলির একাধিক বৈশিষ্ট্য রয়েছে যা টাইপ কুলক্লিকেশন, যা আইকোলিকেশন প্রয়োগ করে যা একটি টোলিস্ট <> () এক্সটেনশন পদ্ধতি রয়েছে। আপনার 'ব্যবহারের' বিবৃতিগুলিতে সিস্টেম.লিংক যুক্ত করুন এবং আপনার ভাল হওয়া উচিত। using System.linq;
অ্যান্টনি বুথ

0

বা এই মত:

List< KeyValuePair< string, int > > theList =
    new List< KeyValuePair< string,int > >(this.yourDictionary);

for ( int i = 0; i < theList.Count; i++)
{ 
  // the key
  Console.WriteLine(theList[i].Key);
}

এটি কীগুলির একটি অনুলিপি তৈরি করে? (যাতে আপনি সুরক্ষিতভাবে গণনা করতে পারেন)
এমসিএমিলাব

এটি .ToList <T> () লিনক এক্সটেনশানটি পুনরায় লেখা হচ্ছে। এছাড়াও, কীভ্যালিউপায়ারের একটি তালিকা একটি অভিধান। মূল অনুরোধটি কেবল কীগুলির তালিকার জন্য ছিল। জনসংখ্যার জন্য একটি লুপ ব্যবহার করা অপ্রয়োজনীয় কারণ তালিকার একটি কনস্ট্রাক্টর রয়েছে যা সংগ্রহ গ্রহণ করে এবং বিদ্যমান তালিকায় যুক্ত করার জন্য একটি অ্যাড্রেঞ্জ () পদ্ধতিও রয়েছে। গৃহীত উত্তর দেখুন।
অ্যান্টনি বুথ

0

একটি সংকর অভিধানের জন্য, আমি এটি ব্যবহার করি:

List<string> keys = new List<string>(dictionary.Count);
keys.AddRange(dictionary.Keys.Cast<string>());

-2

আমি প্রায়শই এটি অভিধানের মূল কী এবং মান পেতে ব্যবহার করি: (ভিবি.নেট)

 For Each kv As KeyValuePair(Of String, Integer) In layerList

 Next

(লেয়ারলিস্টটি টাইপড ডিকশনারি (স্ট্রিংয়ের, পূর্ণসংখ্যার))

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