2014-12-20 5 views
26

मैं जंग में हैशमैप शाब्दिक कैसे बना सकता हूं? अजगर में मैं इसे ऐसा कर सकते हैं:मैं हैश मैप शाब्दिक कैसे बना सकता हूं?

hashmap = { 
    'element0': { 
     'name': 'My New Element', 
     'childs': { 
      'child0': { 
       'name': 'Child For Element 0', 
       'childs': { 
        ... 
       } 
      } 
     } 
    }, 
    ... 
} 
इस तरह

और जाओ में:

type Node struct { 
    name string 
    childs map[string]Node 
} 

hashmap := map[string]Node { 
    "element0": Node{ 
     "My New Element", 
     map[string]Node { 
      'child0': Node{ 
       "Child For Element 0", 
       map[string]Node {} 
      } 
     } 
    } 
} 

उत्तर

32

वहाँ जंग में एक नक्शे के शाब्दिक वाक्य रचना नहीं है। मुझे सटीक कारण पता नहीं है, लेकिन मुझे उम्मीद है कि कई डेटा संरचनाएं हैं जो नक्शा जैसा कार्य करती हैं (जैसे BTreeMap और HashMap) एक को चुनना मुश्किल हो जाएगा।

हालांकि, आप Why does this rust HashMap macro no longer work? में दिखाए गए अनुसार, आपके लिए नौकरी करने के लिए एक मैक्रो बना सकते हैं। यहाँ है कि मैक्रो थोड़ा सरलीकृत है और पर्याप्त संरचना के साथ यह runnable in the playground बनाने के लिए:

macro_rules! map(
    { $($key:expr => $value:expr),+ } => { 
     { 
      let mut m = ::std::collections::HashMap::new(); 
      $(
       m.insert($key, $value); 
      )+ 
      m 
     } 
    }; 
); 

fn main() { 
    let names = map!{ 1 => "one", 2 => "two" }; 
    println!("{} -> {:?}", 1, names.get(&1)); 
    println!("{} -> {:?}", 10, names.get(&10)); 
} 
+5

'grabbag_macros' crate में भी एक है। आप यहां स्रोत देख सकते हैं: https://github.com/DanielKeep/rust-grabbag/blob/master/grabbag_macros/src/lib.rs#L3-L64। –

5

मैं maplit टोकरा सलाह देते हैं। विशिष्ट प्रकार के साथ कंटेनर शाब्दिक के लिए

मैक्रो:

प्रलेखन से उद्धृत करने के लिए।

#[macro_use] extern crate maplit; 

let map = hashmap!{ 
    "a" => 1, 
    "b" => 2, 
}; 

maplit टोकरा मानचित्रण मैक्रो के लिए उपयोग करता है => वाक्य रचना। उपयोग करना संभव नहीं है: नियमित मैक्रो_रूल्स में प्रतिबंधों के कारण विभाजक के कारण विभाजक! मैक्रो।

ध्यान दें कि जंग मैक्रोज़ लचीले हैं जिसमें आप आमंत्रण के लिए उपयोग किए जाने वाले ब्रैकेट्स हैं। आप उन्हें हैशपैप के रूप में उपयोग कर सकते हैं! {} या हैशपैप! [] या हैशपैप!()। यह क्रेट {} & सेट मैक्रोज़ के लिए सम्मेलन के रूप में {} सुझाता है, यह उनके डीबग आउटपुट से मेल खाता है।

मैक्रो

btreemap btreeset तत्वों की सूची से एक BTreeSet बनाएं कुंजी-मान जोड़ों

की सूची में से एक BTreeMap बनाएँ।

hashmap कुंजी-मान जोड़ों की सूची में से एक HashMap बनाएं

HashSet तत्वों की सूची से एक HashSet बनाएँ।

संबंधित मुद्दे