Jawaban:
Dictionary
mungkin yang terdekat. System.Collections.Generic.Dictionary
mengimplementasikan System.Collections.Generic.IDictionary
antarmuka (yang mirip dengan Map
antarmuka Java ).
Beberapa perbedaan penting yang harus Anda perhatikan:
put
dan get
metode untuk mengatur / mendapatkan item
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
pengindeksan untuk mengatur / mendapatkan item
myDictionary[key] = value
MyObject value = myDictionary[key]
null
kunci
HashMap
memungkinkan kunci nolDictionary
melempar ArgumentNullException
jika Anda mencoba menambahkan kunci nolHashMap
akan menggantikan nilai yang ada dengan yang baru.Dictionary
akan mengganti nilai yang ada dengan yang baru jika Anda menggunakan []
pengindeksan. Jika Anda menggunakan Add
metode ini, ia akan membuang ArgumentException
.HashMap
akan mengembalikan nol.Dictionary
akan melempar KeyNotFoundException
. Anda dapat menggunakan TryGetValue
metode alih-alih []
pengindeksan untuk menghindari ini:MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
Ada ContainsKey
metode yang dapat membantu menangani dua masalah sebelumnya.
Dictionary
lempar Pengecualian saat menambahkan kunci duplikat.
if (!myDictionary.TryGetValue(key, value))
membutuhkan out
argumen 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");
}