উত্তর:
Dictionary
সম্ভবত সবচেয়ে কাছের। ইন্টারফেস System.Collections.Generic.Dictionary
প্রয়োগ করে System.Collections.Generic.IDictionary
(যা জাভার Map
ইন্টারফেসের অনুরূপ )।
কিছু উল্লেখযোগ্য পার্থক্য যার বিষয়ে আপনার সচেতন হওয়া উচিত:
put
এবং get
পদ্ধতি রয়েছে
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
আইটেমগুলি সেট করা / পাওয়ার জন্য সূচী ব্যবহার করা হয়
myDictionary[key] = value
MyObject value = myDictionary[key]
null
কী
HashMap
নাল কীগুলি অনুমতি দেয়Dictionary
ছুড়ে ফেলেArgumentNullException
HashMap
বিদ্যমান মানটিকে নতুনের সাথে প্রতিস্থাপন করবে।Dictionary
বিদ্যমান মানটিকে নতুনের সাথে প্রতিস্থাপন করবে যদি আপনি []
ইনডেক্সিং ব্যবহার করেন । আপনি যদি Add
পদ্ধতিটি ব্যবহার করেন তবে এটি পরিবর্তে একটি নিক্ষেপ করবে ArgumentException
।HashMap
শূন্য ফিরে আসবে।Dictionary
একটি নিক্ষেপ করবে KeyNotFoundException
। TryGetValue
এটি []
এড়াতে আপনি সূচকের পরিবর্তে পদ্ধতিটি ব্যবহার করতে পারেন :MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
এর একটি ContainsKey
পদ্ধতি রয়েছে যা আগের দুটি সমস্যা মোকাবেলায় সহায়তা করতে পারে।
Dictionary
নকল কী যুক্ত করার সময় ব্যতিক্রম ছোঁড়া।
if (!myDictionary.TryGetValue(key, value))
out
দ্বিতীয় যুক্তির জন্য একটি দরকার । সুতরাংif (!myDictionary.TryGetValue(key, out value))
থেকে জাভা HashMap সি সমতুল্য #
আমার একটি অভিধানের দরকার ছিল যা একটি "নাল" কী গ্রহণ করেছিল, তবে মনে হয় কোনও স্থানীয় নেই, তাই আমি নিজের লেখা লিখে রেখেছি written এটি আসলে খুব সহজ। আমি অভিধান থেকে উত্তরাধিকার সূত্রে পেয়েছি, "নাল" কীটির মান ধরে রাখতে একটি ব্যক্তিগত ক্ষেত্র যুক্ত করেছি, তারপরে সূচকটি ওভাররাইট করে ten এটা এইভাবেই চলে :
public class NullableDictionnary : Dictionary<string, string>
{
string null_value;
public StringDictionary this[string key]
{
get
{
if (key == null)
{
return null_value;
}
return base[key];
}
set
{
if (key == null)
{
null_value = value;
}
else
{
base[key] = value;
}
}
}
}
আশা করি এটি ভবিষ্যতে কাউকে সহায়তা করবে।
==========
আমি এটিকে এই ফর্ম্যাটে পরিবর্তন করেছি
public class NullableDictionnary : Dictionary<string, object>
আমাকে "কোডাডটিক্টের অ্যালগরিদম" উদাহরণ দিয়ে এটি বুঝতে সাহায্য করুন
' অভিধান C #' 'হয় Hashmap সমান্তরাল মহাবিশ্বের জাভা'।
কিছু বাস্তবায়ন আলাদা। আরও ভাল করে বুঝতে নীচের উদাহরণটি দেখুন।
জাভা হ্যাশম্যাপ ঘোষণা:
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
সি # অভিধান ঘোষণা:
Dictionary<int, int> Pairs = new Dictionary<int, int>();
একটি অবস্থান থেকে একটি মান প্রাপ্তি:
pairs.get(input[i]); // in Java
Pairs[input[i]]; // in C#
অবস্থানটিতে একটি মান নির্ধারণ:
pairs.put(k - input[i], input[i]); // in Java
Pairs[k - input[i]] = input[i]; // in C#
কোডাডডিক্টের অ্যালগরিদমের নীচে থেকে একটি সামগ্রিক উদাহরণ লক্ষ্য করা যায়।
জাভাতে কোডাডিক্টসের অ্যালগরিদম:
import java.util.HashMap;
public class ArrayPairSum {
public static void printSumPairs(int[] input, int k)
{
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
for (int i = 0; i < input.length; i++)
{
if (pairs.containsKey(input[i]))
System.out.println(input[i] + ", " + pairs.get(input[i]));
else
pairs.put(k - input[i], input[i]);
}
}
public static void main(String[] args)
{
int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };
printSumPairs(a, 10);
}
}
সি # তে কোডাডিক্টের অ্যালগরিদম
using System;
using System.Collections.Generic;
class Program
{
static void checkPairs(int[] input, int k)
{
Dictionary<int, int> Pairs = new Dictionary<int, int>();
for (int i = 0; i < input.Length; i++)
{
if (Pairs.ContainsKey(input[i]))
{
Console.WriteLine(input[i] + ", " + Pairs[input[i]]);
}
else
{
Pairs[k - input[i]] = input[i];
}
}
}
static void Main(string[] args)
{
int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };
//method : codaddict's algorithm : O(n)
checkPairs(a, 10);
Console.Read();
}
}
হ্যাশটেবল ক্লাসের জন্য এমএসডিএন-তে ডকুমেন্টেশন দেখুন ।
কী-এবং-মান জুটির একটি সংকলন উপস্থাপন করে যা কী এর হ্যাশ কোডের ভিত্তিতে সংগঠিত হয়।
এছাড়াও, মনে রাখবেন যে এটি থ্রেড-নিরাপদ নয়।
Dictionary<TKey, TValue>
সংকলন সময় টাইপ পরীক্ষার কারণে এবং এর জন্য মূল্য ধরণের বক্সিংয়ের প্রয়োজন হয় না বলেই তার পছন্দ হয়।
অভিধান ব্যবহার করুন - এটি হ্যাশটেবল ব্যবহার করে তবে প্রকারভেদ হয়।
এছাড়াও, আপনার জাভা কোড
int a = map.get(key);
//continue with your logic
সি # তে এভাবে সেরা কোড করা হবে:
int a;
if(dict.TryGetValue(key, out a)){
//continue with your logic
}
এইভাবে, আপনি কোনও ব্লকের ভিতরে "এ" ভেরিয়েবলের প্রয়োজনীয়তাটি স্কোপ করতে পারেন এবং আপনার যদি পরে এটির প্রয়োজন হয় তবে এটি ব্লকের বাইরেও অ্যাক্সেসযোগ্য।
উত্তরটা হচ্ছে
অভিধান
আমার ফাংশনটি দেখুন, এর সাধারণ অ্যাড অভিধানের মধ্যে সবচেয়ে গুরুত্বপূর্ণ সদস্য ফাংশন ব্যবহার করে
তালিকায় সদৃশ আইটেম থাকলে এই ফাংশনটি মিথ্যা প্রত্যাবর্তন করে
public static bool HasDuplicates<T>(IList<T> items)
{
Dictionary<T, bool> mp = new Dictionary<T, bool>();
for (int i = 0; i < items.Count; i++)
{
if (mp.ContainsKey(items[i]))
{
return true; // has duplicates
}
mp.Add(items[i], true);
}
return false; // no duplicates
}
আমি শুধু আমার দুটি সেন্ট দিতে চেয়েছিলাম।
এটি @ পাওয়ারলর্ডের উত্তর অনুসারে।
নাল স্ট্রিংয়ের পরিবর্তে "নাল" রাখে ।
private static Dictionary<string, string> map = new Dictionary<string, string>();
public static void put(string key, string value)
{
if (value == null) value = "null";
map[key] = value;
}
public static string get(string key, string defaultValue)
{
try
{
return map[key];
}
catch (KeyNotFoundException e)
{
return defaultValue;
}
}
public static string get(string key)
{
return get(key, "null");
}