वेक्टर ऑफ़ स्ट्रिंग्स पर ज्वाइन ऑपरेटर के समतुल्य क्या है?


120

मैं एक वेक्टर के ऊपर "जॉइन" ऑपरेटर के लिए रस्ट के बराबर नहीं पा रहा था String। मेरे पास Vec<String>एक एकल के रूप में शामिल होने की इच्छा है String:

let string_list = vec!["Foo".to_string(),"Bar".to_string()];
let joined = something::join(string_list,"-");
assert_eq!("Foo-Bar", joined);

सम्बंधित:

जवाबों:


153

रस्ट में 1.3.0 और बाद में, joinउपलब्ध है:

fn main() {
    let string_list = vec!["Foo".to_string(),"Bar".to_string()];
    let joined = string_list.join("-");
    assert_eq!("Foo-Bar", joined);
}

1.3.0 से पहले इस विधि को बुलाया गया था connect:

let joined = string_list.connect("-");

ध्यान दें कि मानक पुस्तकालय प्रस्तावना द्वारा स्वचालित रूप से आयात किए जाने के बाद से आपको कुछ भी आयात करने की आवश्यकता नहीं है ।


7
शायद यह बदल गया है, लेकिन SliceConcatExtकेवल रात है।

5
@ आगे लक्षण अस्थिर चिह्नित किया गया है, लेकिन इसके तरीके स्थिर हैं ताकि आप उनका उपयोग कर सकें। आपको स्पष्ट रूप useसे विशेषता की आवश्यकता नहीं है क्योंकि यह प्रस्तावना में है।
16


1
@shepmaster अगर मैं अपने 'जबाब' सही ढंग से, वहाँ एक है पढ़ा joinमें itertools
स्टीव पॉवेल

2
साभार @shepmaster दुर्भाग्यवश, किसी अन्य उत्तर के लिए आपका असंबद्ध संदर्भ गूढ़ था, इसलिए यह बिल्कुल स्पष्ट नहीं था कि उस उत्तर का कौन सा भाग प्रासंगिक था। यद्यपि आपकी टिप्पणियाँ, सुधार और उत्तर हमेशा उत्कृष्ट हैं, आपकी शैली कृपालु और ऑफ-पुटिंग है।
स्टीव पॉवेल


10

itertoolsटोकरा से एक फ़ंक्शन भी कहा जाता है joinजो एक पुनरावृत्ति में शामिल होता है:

extern crate itertools; // 0.7.8

use itertools::free::join;
use std::fmt;

pub struct MyScores {
    scores: Vec<i16>,
}

impl fmt::Display for MyScores {
    fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
        fmt.write_str("MyScores(")?;
        fmt.write_str(&join(&self.scores[..], &","))?;
        fmt.write_str(")")?;
        Ok(())
    }
}

fn main() {
    let my_scores = MyScores {
        scores: vec![12, 23, 34, 45],
    };
    println!("{}", my_scores); // outputs MyScores(12,23,34,45)
}

6
इस कोड के उपयोगकर्ताओं को यह पता होना चाहिए कि यह केवल फेंकने के लिए एक संभावित बड़े स्ट्रिंग को आवंटित करता है। स्ट्रिंग्स को सीधे आउटपुट में लिखना अधिक कुशल है। यह भी देखें कि Rust में रिक्त स्थान द्वारा अलग किए गए पुनरावृति प्रिंट करने के लिए एक मुहावरेदार तरीका क्या है? , जंग में, एक कंटेनर में प्रत्येक मूल्य के बीच कुछ प्रिंट करने का सबसे अच्छा तरीका क्या है?
शेमपस्टर

2
समझ में आता है, हालांकि सवाल यह था कि join, फॉर्मेटिंग एल्गोरिदम को अनुकूलित करने के तरीके नहीं, नहीं?
निक लिंकर

6
collect+ joinतेजी से होता है और कोई निर्भरता कहते हैं, यह देखने सार एक बेंचमार्क के लिए
murlakatamenka
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.