SelectMany
सी # में हास्केल (>>=)
या flatMap
में बाला से मेल खाता है। हास्केल में >>=
के हस्ताक्षर है:
(>>=) :: Monad m => m a -> (a -> m b) -> m b
तो बाँध एक-दूसरे monadic मूल्य का निर्माण करने के लिए इस्तेमाल एक ऑपरेशन है।
ऊपर हस्ताक्षर में सी # m
के मामले में IEnumerable
, IObservable
, IQueryable
आदि IEnumerable
के लिए, SelectMany
इसलिए
IEnumerable<A> -> (A -> IEnumerable<B>) -> IEnumerable<B>
है या में सी #
public static IEnumerable<B> SelectMany<A, B>(this IEnumerable<A> first, Func<A, IEnumerable<B>> selector)
बाँध का अर्थ निर्भर करता है मोनैड प्रकार पर, आईनेमरेबल के लिए, इनपुट अनुक्रम में प्रत्येक तत्व का उपयोग एक नया अनुक्रम बनाने के लिए किया जाता है, और अनुक्रमों के परिणामी अनुक्रम पीआर को चपटा जाता है आउटपुट अनुक्रम oduce।
बांध का एक और सूत्र है जो इसे और अधिक स्पष्ट कर सकता है। जबकि मोनैड को अक्सर बाइंड के कार्यान्वयन के संदर्भ में वर्णित किया जाता है, मोनैड को दो अन्य परिचालनों का समर्थन करना चाहिए, map
और join
।
map
में सी # का चयन से मेल खाती है और लगता है कि:
map :: Monad m => (a -> b) -> (ma -> m b)
तो यह एक 'संरचना संरक्षण' एक monadic मूल्य से अधिक एक नियमित रूप से समारोह उठाने का तरीका है।
join
प्रकार
join :: Monad m => m m a -> m a
इसलिए शामिल होने नेस्टेड monadic मूल्यों समतल करने के लिए इस्तेमाल किया जाता है।सी # में इस तरह
public static IEnumerable<A> Join<A>(this IEnumerable<IEnumerable<A>> nested)
bind
नक्शे के मामले में लागू किया जा सकता देखने के लिए और शामिल होने के रूप में
m >>= f = join (map f m)
तो मूल सवाल का जवाब देने हैं, SelectMany
अन्य भाषाओं में bind
या flatMap
से मेल खाती है। बाइंड सिर्फ फ्लैटनिंग नहीं कर रहा है, लेकिन इसे नेस्टेड मोनैडिक वैल्यू (जैसे IEnumerable<T>
के मामले में अनुक्रम) के प्रवाह के बाद एक परिवर्तन के रूप में देखा जा सकता है। join
IEnumerable<T>
के लिए मौजूदा linq एक्सटेंशन में मौजूद नहीं है।
SelectMany नक्शा है। http://stackoverflow.com/questions/6820866/what-function-acts-as-selectmany-in-jquery –
चयन करें कई बाध्य करने के लिए isomorphic है। ' SelectMany का पहला हस्ताक्षर मोनैडिक "बाइंड" ऑपरेटर के लिए isomorphic है, लिखा है = = हास्केल में। इसमें शामिल एक कारण है कि मोनैड के अच्छी तरह से स्थापित ढांचे पर LINQ की नींव को दृढ़ करना है। वह नींव LINQ polymorphically composable राज्य प्रचार, अपवाद, निरंतरता, विकल्प, आदि जैसे सभी प्रकार की चीजों के लिए लागू करता है .: सभी monads। ' http://stackoverflow.com/questions/422958/how-c-sharp-compiler-choose-selectmany-when-translating-linq-expression –
एक सहसंबंधित शामिल हों। एसक्यूएल सर्वर में यह एक 'क्रॉस आवेदन' होगा। – usr