2008-09-09 51 views
28

我一直在做C#很長一段時間,從來沒有遇到過一個簡單的方法來只是新的哈希。在C#中的文字哈希?

我最近熟悉了散列的ruby語法和奇蹟,有沒有人知道一個簡單的方法來聲明一個散列作爲一個文字,沒有做所有的添加調用。

{ "whatever" => {i => 1}; "and then something else" => {j => 2}}; 

回答

31

如果您使用的是C#3.0(.NET 3.5),那麼您可以使用集合初始值設定項。它們不像Ruby那麼簡潔,但仍然有所改進。

這個例子是基於MSDN Example

var students = new Dictionary<int, StudentName>() 
{ 
    { 111, new StudentName {FirstName="Sachin", LastName="Karnik", ID=211}}, 
    { 112, new StudentName {FirstName="Dina", LastName="Salimzianova", ID=317, }}, 
    { 113, new StudentName {FirstName="Andy", LastName="Ruth", ID=198, }} 
}; 
+3

BTW:VisualStudio的/ ReSharper的告訴我,新的Dictionary ()中的圓括號是可選的和多餘的。保存兩個字符;) – 2009-06-10 15:59:33

7

當我不能使用C#3.0中,我用翻譯一組參數到字典中的輔助功能。

public IDictionary<KeyType, ValueType> Dict<KeyType, ValueType>(params object[] data) 
{ 
    Dictionary<KeyType, ValueType> dict = new Dictionary<KeyType, ValueType>((data == null ? 0 :data.Length/2)); 
    if (data == null || data.Length == 0) return dict; 

    KeyType key = default(KeyType); 
    ValueType value = default(ValueType); 

    for (int i = 0; i < data.Length; i++) 
    { 
     if (i % 2 == 0) 
      key = (KeyType) data[i]; 
     else 
     { 
      value = (ValueType) data[i]; 
      dict.Add(key, value); 
     } 
    } 

    return dict; 
} 

使用這樣的:

IDictionary<string,object> myDictionary = Dict<string,object>(
    "foo", 50, 
    "bar", 100 
); 
-1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Dictionary 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Program p = new Program();     
      Dictionary<object, object > d = p.Dic<object, object>("Age",32,"Height",177,"wrest",36);//(un)comment 
      //Dictionary<object, object> d = p.Dic<object, object>();//(un)comment 

      foreach(object o in d) 
      { 
       Console.WriteLine(" {0}",o.ToString()); 
      } 
      Console.ReadLine();  
     } 

     public Dictionary<K, V> Dic<K, V>(params object[] data) 
     {    
      //if (data.Length == 0 || data == null || data.Length % 2 != 0) return null; 
      if (data.Length == 0 || data == null || data.Length % 2 != 0) return new Dictionary<K,V>(1){{ (K)new Object(), (V)new object()}}; 

      Dictionary<K, V> dc = new Dictionary<K, V>(data.Length/2); 
      int i = 0; 
      while (i < data.Length) 
      { 
       dc.Add((K)data[i], (V)data[++i]); 
       i++;  
      } 
      return dc;    
     } 
    } 
} 
1

由於C#3.0(.NET 3.5)哈希表的文字可以像這樣被指定:

var ht = new Hashtable { 
    { "whatever", new Hashtable { 
      {"i", 1} 
    } }, 
    { "and then something else", new Hashtable { 
      {"j", 2} 
    } } 
};