मान लिया जाये कि आप String
का लचीलापन चाहते हैं, HashMap<String, String>
सही है। अन्य विकल्प &str
है, लेकिन यह HashMap
का उपयोग किया जा सकता है/जहां इसे चारों ओर पारित किया जा सकता है, इस पर महत्वपूर्ण प्रतिबंध लगाता है; लेकिन अगर यह काम करता है, तो &str
पर एक या दोनों पैरामीटर बदलना अधिक कुशल होगा। इस विकल्प को निर्धारित किया जाना चाहिए कि आपको किस तरह के स्वामित्व सेमेन्टिक्स की आवश्यकता है, और स्ट्रिंग्स कितनी गतिशील हैं, this answer और the strings guide और देखें।
Btw, खोज एक String
के साथ एक HashMap<String, ...>
महंगा हो सकता है: यदि आप पहले से ही एक नहीं है, यह एक नई String
आवंटन की आवश्यकता है।
use std::collections::HashMap;
fn main() {
let mut mymap = HashMap::new();
mymap.insert("foo".to_string(), "bar".to_string());
println!("{}", mymap.find_equiv(&"foo"));
println!("{}", mymap.find_equiv(&"not there"));
}
playpen (ध्यान दें मैं Option
छोड़ दिया है: हम एक काम के लिए एक नया String
आवंटन के बिना (, किसी भी &str
और अधिक सामान्य रूप) find_equiv
का रूप है, जो आप एक स्ट्रिंग शाब्दिक पारित करने के लिए अनुमति देता है में चारों ओर है वापसी मूल्य में, कोई .unwrap()
पर कॉल कर सकता है या एक लापता कुंजी को ठीक से संभाल सकता है)।
एक और थोड़ा अलग विकल्प (कुछ परिस्थितियों में अधिक सामान्य है, दूसरों में कम), (the name suggests के रूप में) का आवंटन बिना, std::string::as_string
समारोह है, जो &str
में डेटा देखने की अनुमति देता जैसे कि यह एक &String
थे। यह एक ऑब्जेक्ट देता है जिसे String
पर संदर्भित किया जा सकता है, उदा।
use std::collections::HashMap;
use std::string;
fn main() {
let mut mymap = HashMap::new();
mymap.insert("foo".to_string(), "bar".to_string());
println!("{}", mymap[*string::as_string("foo")]);
}
playpen
(एक समान std::vec::as_vec
नहीं है।)
यह स्वामित्व तार होने की जरूरत है? क्या आप इसे 'और' स्थिर स्ट्र '(स्ट्रिंग अक्षर) के साथ कर सकते हैं, खासकर चाबियों के लिए? –