2008-09-09 13 views
28

मैं लंबे समय से सी # कर रहा हूं, और कभी भी हैश को नया करने का आसान तरीका नहीं आया है।सी # में शाब्दिक हैश?

मैं हाल ही में हैश और आश्चर्य के रूबी सिंटैक्स से परिचित हो गया हूं, क्या किसी को सभी ऐड कॉल किए बिना हैश को शाब्दिक घोषित करने का एक आसान तरीका पता है।

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

उत्तर

31

यदि आप सी # 3.0 (.NET 3.5) का उपयोग कर रहे हैं तो आप संग्रह प्रारंभकर्ताओं का उपयोग कर सकते हैं। वे रूबी के रूप में काफी नहीं हैं लेकिन अभी भी एक सुधार है।

यह उदाहरण 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 मुझसे कहता है , कि नए शब्दकोश में intheses () वैकल्पिक और अनावश्यक हैं। दो अक्षर बचाता है;) –

7

पर आधारित है जब मैं सी # 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

के बाद से सी # 3.0 (.NET 3.5) hashtable शाब्दिक इसलिए की तरह निर्दिष्ट किया जा सकता:

var ht = new Hashtable { 
    { "whatever", new Hashtable { 
      {"i", 1} 
    } }, 
    { "and then something else", new Hashtable { 
      {"j", 2} 
    } } 
}; 
संबंधित मुद्दे