यहाँ एक मैक्रो काम करता है:
#![feature(macro_rules)]
macro_rules! product(
($first:ident, $($next:ident),*) => (
$first.iter() $(
.flat_map(|e| std::iter::Repeat::new(e)
.zip($next.iter()))
)*
);
)
fn main() {
let a = ['A', 'B', 'C'];
let b = [1i, 4];
let c = [true, false];
let d = ['x', 'y'];
for (((a, b), c), d) in product![a, b, c, d] {
println!("{} {} {} {}", a, b, c, d);
}
}
आउटपुट:
A 1 true x
A 1 true y
A 1 false x
A 1 false y
A 4 true x
A 4 true y
etc...
Playpen example
मैक्रो निम्नलिखित
a.iter()
.flat_map(|e| std::iter::Repeat::new(e).zip(b.iter()))
.flat_map(|e| std::iter::Repeat::new(e).zip(c.iter()))
.flat_map(|e| std::iter::Repeat::new(e).zip(d.iter()))
के लिए विस्तारितइटरेटर के अनुक्रम को एक पुनरावर्तक में जोड़ता है। e
एक इटरेटर द्वारा उत्पादित एक तत्व है।
std::iter::Repeat::new(e)
एक पुनरावर्तक बनाता है जो e
दोहराता है।
.zip(...)
एक साथ दो पुनरावृत्तियों को दोहराता है, जो एक जोड़ी दोनों के तत्वों को उपज देता है।
मैक्रो थोड़ा अधिक समय की व्याख्या करने के हैं, इसलिए इसे पढ़ने के लिए macro guide
मैं अगर यह यह करने के लिए सबसे अच्छा तरीका है पता नहीं है सबसे अच्छा है।
स्रोत
2014-07-18 09:29:02
मुझे लगता है कि मैं बूल को एक विशेष मामला होने की उम्मीद करता हूं, मैं एक अलग उपकरण चाहता हूं। लेकिन एक सामान्य व्यक्ति अन्य परिस्थितियों के लिए आसान होगा। असल में, बूल के लिए, कई लोग 'std :: bitset' पर "पुनरावृत्ति" (गिनती) करते हैं। –
पायथन में आप क्या चाहते हैं ['itertools.product'] (https://docs.python.org/3/library/itertools.html#itertools.product)। जंग में ऐसी चीज को कार्यान्वित करना, हालांकि, उतना आसान नहीं है जितना कि यह पहले प्रतीत होता है। इसे लागू करने के लिए आम तौर पर मैक्रोज़ की आवश्यकता होगी। –