Giriş
Şu satırı dahil ederiz.
Bir çok thread sadece okumak için kullanıyorsa sorun olmuyor. Açıklaması şöyle
Dictionary sınıfı KeyValuePair yapısı ile bütünleşiktir. Bu yapının Key ve Value isimli iki alanı vardır. Tüm veri yapısı şöyle dolaşılır.
Değiştirilemez. Aşağıdaki kod hata verir.
KeyValuePair yapısına baktıktan sonra detaylara inelim.
Alanlar
Count Alanı
Şöyle yaparız.
Şöyle yaparız. Linq ile de kullanılabilir.
Constructor
Şöyle yaparız.
Örnek
Key string olduğu için şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Key değerinin mevcut olduğundan eminsek şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Elimizde şöyle bir yapı olsun.
Bir key/value çifti döner. Şöyle yaparız.
Belirtilen anahtarı siler.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şu satırı dahil ederiz.
using System.Collections.Generic;
Bu sınıfa benzer işlevler sağlayan diğer sınıflar ConcurrentDictionary ve SortedDictionary sınıfları. Ayrıca HashTable sınıfı da benzer işlev sağlar.Bir çok thread sadece okumak için kullanıyorsa sorun olmuyor. Açıklaması şöyle
KeyValuePair YapısıA Dictionary can support multiple readers concurrently, as long as the collection is not modified. Even so, enumerating through a collection is intrinsically not a thread-safe procedure. In the rare case where an enumeration contends with write accesses, the collection must be locked during the entire enumeration. To allow the collection to be accessed by multiple threads for reading and writing, you must implement your own synchronization.
Dictionary sınıfı KeyValuePair yapısı ile bütünleşiktir. Bu yapının Key ve Value isimli iki alanı vardır. Tüm veri yapısı şöyle dolaşılır.
Dictionary<string, int> dict = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in dict) {
int i = item.Value;
}
Key AlanıDeğiştirilemez. Aşağıdaki kod hata verir.
KeyValuePair<string,string> kvp = ...;
kvp["..."] = "...";
Şu hatayı alırız.Dictionary SınıfıCannot apply indexing with [] to an expression of type System.Collections.Generic.KeyValuePair'
KeyValuePair yapısına baktıktan sonra detaylara inelim.
Alanlar
Count Alanı
Şöyle yaparız.
dic.Count
Keys Alanı
Şöyle yaparız.var keys = dic.Keys.OrderByDescending(o => o).ToList();
Values AlanıŞöyle yaparız. Linq ile de kullanılabilir.
dic.Values.First();
MetodlarConstructor
Şöyle yaparız.
Dictionary<string, double> dic = new Dictionary<string,double>();
Constructor - IEqualityComparerÖrnek
Key string olduğu için şöyle yaparız.
var dic = new Dictionary<string,
double>(StringComparer.OrdinalIgnoreCase);
ÖrnekŞöyle yaparız.
public class CustomEqualityComparer : IEqualityComparer<Foo>
{
public new bool Equals(Foo x, Foo y)
{
...
return false;
}
public int GetHashCode(Foo obj)
{
...
return obj.GetHashCode();
}
}
Şöyle yaparız.var dictionary = new Dictionary<Foo, String>(new CustomEqualityComparer());
Add metoduŞöyle yaparız.
_dQuote.Add("key1"
, 1.1);
Bracket operatorKey değerinin mevcut olduğundan eminsek şöyle yaparız.
var key = ...;
var val = dic[key];
Clear metodu
Şöyle yaparız.
dic.Clear();
ContainsKey metoduŞöyle yaparız.
if (dic.ContainsKey("...")) {...}
FirstOrDefault MetoduElimizde şöyle bir yapı olsun.
Dictionary<int, string> dic = new Dictionary<int, string>();
Value olarak C içeren girdiyi bulmak için şöyle yaparız. Burada key alanı ile arama yapmak yerine, value alanına göre arama yapıyoruz.var resultItem = dic.FirstOrDefault (x=>x.value=="C");
if(resultItem !=null) //returns default value if no match found
{
int resultID = resultItem.Key;
}
Last MetoduBir key/value çifti döner. Şöyle yaparız.
Dictionary<string, List<string>> dic = new Dictionary<string, List<string>>();
var obj = dic.Last();
dic.Remove (obj.Key);
Remove MetoduBelirtilen anahtarı siler.
Örnek
Şöyle yaparız.
var key = ...;
dic.Remove (key);
ÖrnekŞöyle yaparız.
public static class DictionaryExtensions
{
public static bool TryRemove<TKey, TValue>(this IDictionary<TKey, TValue> dict,
TKey key, out TValue value)
{
if (dict.TryGetValue(key, out value))
return dict.Remove(key);
else
return false;
}
}
TryGetValue metoduŞöyle yaparız.
string bla;
if (dic.TryGetValue ("...", out bla))
{
//the key exists
}
else
{
//the key doesn't exist
}
Şöyle bir extension metod faydalı oluyor.public static class DictionaryExtensions
{
public static V ValueOrDefault<K,V>(this IDictionary<K,V> dictionary, T key)
{
if (key == null || dictionary == null)
return default(V);
V value;
return dictionary.TryGetValue(key, out value) ? value : default(V);
}
}
Şöyle kullanırız.var bla = dic.ValueOrDefault ("...");
Hiç yorum yok:
Yorum Gönder