Jawaban:
Dictionarymungkin yang terdekat. System.Collections.Generic.Dictionarymengimplementasikan System.Collections.Generic.IDictionaryantarmuka (yang mirip dengan Mapantarmuka Java ).
Beberapa perbedaan penting yang harus Anda perhatikan:
putdan getmetode untuk mengatur / mendapatkan item
myMap.put(key, value)MyObject value = myMap.get(key)[]pengindeksan untuk mengatur / mendapatkan item
myDictionary[key] = valueMyObject value = myDictionary[key]null kunci
HashMapmemungkinkan kunci nolDictionarymelempar ArgumentNullExceptionjika Anda mencoba menambahkan kunci nolHashMapakan menggantikan nilai yang ada dengan yang baru.Dictionaryakan mengganti nilai yang ada dengan yang baru jika Anda menggunakan []pengindeksan. Jika Anda menggunakan Addmetode ini, ia akan membuang ArgumentException.HashMapakan mengembalikan nol.Dictionaryakan melempar KeyNotFoundException. Anda dapat menggunakan TryGetValuemetode alih-alih []pengindeksan untuk menghindari ini:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }DictionaryAda ContainsKeymetode yang dapat membantu menangani dua masalah sebelumnya.
Dictionarylempar Pengecualian saat menambahkan kunci duplikat.
if (!myDictionary.TryGetValue(key, value))membutuhkan outargumen kedua. Jadiif (!myDictionary.TryGetValue(key, out value))
Dari C # setara dengan Java HashMap
Saya membutuhkan Kamus yang menerima kunci "null", tetapi sepertinya tidak ada yang asli, jadi saya telah menulis sendiri. Sebenarnya sangat sederhana. Saya mewarisi dari Kamus, menambahkan bidang pribadi untuk menyimpan nilai untuk kunci "null", kemudian menimpa pengindeks. Bunyinya seperti ini:
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;
}
}
}
}
Semoga ini bisa membantu seseorang di masa depan.
==========
Saya memodifikasinya ke format ini
public class NullableDictionnary : Dictionary<string, object>
Biarkan saya membantu Anda memahaminya dengan contoh "algoritma codaddict"
' Kamus dalam C #' adalah ' Hashmap in Java' dalam paralel paralel.
Beberapa implementasi berbeda. Lihat contoh di bawah ini untuk memahami lebih baik.
Mendeklarasikan Java HashMap:
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
Mendeklarasikan Kamus C #:
Dictionary<int, int> Pairs = new Dictionary<int, int>();
Mendapatkan nilai dari lokasi:
pairs.get(input[i]); // in Java
Pairs[input[i]]; // in C#
Menetapkan nilai di lokasi:
pairs.put(k - input[i], input[i]); // in Java
Pairs[k - input[i]] = input[i]; // in C#
Contoh Keseluruhan dapat diamati dari algoritma Codaddict di bawah ini.
algoritma codaddict di Jawa:
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);
}
}
Algoritma Codaddict dalam C #
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();
}
}
Lihat dokumentasi di MSDN untuk kelas Hashtable .
Merupakan kumpulan pasangan kunci dan nilai yang disusun berdasarkan kode hash kunci.
Juga, perlu diingat bahwa ini bukan thread-safe.
Dictionary<TKey, TValue>lebih disukai, karena kompilasi memeriksa jenis waktu dan karena itu tidak memerlukan tinju jenis nilai.
Gunakan Kamus - ini menggunakan hashtable tetapi typesafe.
Juga, kode Java Anda untuk
int a = map.get(key);
//continue with your logic
akan diberi kode terbaik dalam C # dengan cara ini:
int a;
if(dict.TryGetValue(key, out a)){
//continue with your logic
}
Dengan cara ini, Anda dapat menentukan kebutuhan variabel "a" di dalam blok dan masih dapat diakses di luar blok jika Anda membutuhkannya nanti.
jawabannya adalah
Kamus
lihat fungsi saya, penambahan sederhana menggunakan fungsi anggota paling penting di dalam Kamus
fungsi ini kembali salah jika daftar berisi item duplikat
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
}
Saya hanya ingin memberikan dua sen.
Ini sesuai dengan jawaban @Powerlord.
Letakkan "null" sebagai ganti string nol .
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");
}