"ভাঁজ" লিনকিউ এক্সটেনশন পদ্ধতিটি কোথায়?


95

আমি এমএসডিএন এর লিনাকের নমুনায় পেয়েছি ফোল্ড () নামক একটি ঝরঝরে পদ্ধতি যা আমি ব্যবহার করতে চাই। তাদের উদাহরণ:

double[] doubles = { 1.7, 2.3, 1.9, 4.1, 2.9 }; 
double product = 
     doubles.Fold((runningProduct, nextFactor) => runningProduct * nextFactor); 

দুর্ভাগ্যক্রমে, আমি এটি উদাহরণস্বরূপ বা আমার নিজস্ব কোডে সংকলন করতে পারছি না, এবং এমএসডিএন-তে (অন্যরকম বা অ্যারে এক্সটেনশন পদ্ধতিগুলির মতো) এই পদ্ধতির উল্লেখ করে অন্য কোথাও খুঁজে পাচ্ছি না। আমি যে ত্রুটিটি পেয়েছি তা সরল পুরানো "ত্রুটি সম্পর্কে কিছুই জানে না":

error CS1061: 'System.Array' does not contain a definition for 'Fold' and no 
extension method 'Fold' accepting a first argument of type 'System.Array' could 
be found (are you missing a using directive or an assembly reference?)

আমি লিনক (যেমন সিলেক্ট () এবং কোথাও () এর থেকে আসা অন্যান্য পদ্ধতিগুলি ব্যবহার করছি এবং আমি "সিস্টেম.লিনক ব্যবহার করছি", তাই আমি মনে করি এটি ঠিক আছে।

এই পদ্ধতিটি কি সত্যিই সি # 3.5 তে বিদ্যমান আছে এবং যদি তাই হয় তবে আমি কী ভুল করছি?


4
আপনার উল্লেখ করা নমুনাগুলি পৃষ্ঠায় ব্রেড ক্রাম ট্রেল * দেখুন it এটি ভবিষ্যতের পণ্য হিসাবে C # 3 কে বোঝায়। ভবিষ্যতের পণ্যগুলি জাহাজের আগে প্রায়শই পরিবর্তিত হয়। উল্লিখিত অন্যদের মতো, অনুগ্রহযোগ্য দেখুন g সম্মিলিত এবং মজা করুন। :) * ভিজ্যুয়াল সি # বিকাশকারী কেন্দ্র> হোম> পণ্যের তথ্য> ভবিষ্যতের সংস্করণ> 101 লিনিক্য নমুনা> সমষ্টিগত অপারেটরগুলি
কর্ট নিকোলস

উত্তর:


127

আপনি Aggregateএক্সটেনশন পদ্ধতিটি ব্যবহার করতে চাইবেন :

double product = doubles.Aggregate(1.0, (prod, next) => prod * next);

আরও তথ্যের জন্য এমএসডিএন দেখুন । এটি আপনাকে seedক্রমাগত মানগুলি গণনা করার জন্য একটি এবং তারপরে একটি এক্সপ্রেশন নির্দিষ্ট করতে দেয় ।


4
এটি লক্ষ করা উচিত যে আপনার কোনও বীজ থাকতে হবে না। আপনি যদি ওভারলোডকে কল করেন যার কোন বীজ নেই তবে তালিকার প্রথম উপাদানটি প্রাথমিক সমষ্টি হিসাবে ব্যবহৃত হবে এবং Funcদ্বিতীয় উপাদানটি পৌঁছানোর পরে কেবল এটি ডাকা হবে। দেখুন: এমএসডিএন.মাইক্রোসফটকম
জোশ গালাগের

যদি আমি সঠিকভাবে বুঝতে পারি তবে এটি ভাঁজ হয় না: / ভাঁজটিতে বিভিন্ন ধরণের উভয় যুক্তি গ্রহণ করা উচিত। উদাহরণস্বরূপ, প্রথম আরগ হিসাবে একটি স্ট্রিং ব্যবহার করতে পারে এবং দ্বিতীয় আর্গ হিসাবে যে কোনও কিছু রয়েছে ToString(), সুতরাং পুরো ধারকটির একটি পাঠ্য উপস্থাপনা ফিরে আসে।
হাই-এঞ্জেল

@ হাই-অ্যাঞ্জেল, না, উদাহরণটি আসলে ভাঁজ। <double>টাইপ প্যারামিটার ঠিক স্বয়ংক্রিয়ভাবে কম্পাইলার দ্বারা প্রয়োজন হয় না অনুমিত এবং এইভাবে হয়।
kdbanman

4
@ হাই-অ্যাঞ্জেল, pএবং elemআপনার পছন্দ মতো যা হতে পারে। দেখুন এই জমিদার হিসাবে ব্যবহৃত এই উদাহরণে
kdbanman

4
@ কেডব্যানম্যান ভুল করে বলছেন, ঠিক যে সময়ে এটি আমার পক্ষে কাজ করছিল না কেন এটি সত্যই আকর্ষণীয় ...: / আপনি ঠিক বলেছেন, এটি কাজ করে।
হাই-অ্যাঞ্জেল

42

ভাঁজ (ওরফে হ্রাস) কার্যকরী প্রোগ্রামিং থেকে স্ট্যান্ডার্ড শব্দ। যে কারণেই হোক না কেন এটির নাম লিনকিউতে সমষ্টির নামকরণ হয়েছে।

double product = doubles.Aggregate(1.0, (runningProduct, nextFactor) => runningProduct* nextFactor);

9
সমষ্টি হ'ল ওও এবং এসকিউএল রাজ্যে আরও পরিচিত শব্দ।
অ্যাডাম রবিনসন

4
ক্রিয়েট অ্যাগ্রিগেট কীওয়ার্ড ( এমএসডিএন.মাইক্রোসফটকম /en-us/library/ms182741.aspx ) সম্পর্কে সচেতন ছিল না every প্রতিদিন নতুন কিছু শিখুন।
রিচার্ড বার্গ

4
মজার বিষয়, আমি এসকিউএলের বাইরে কখনও "সমষ্টি" শুনিনি। ডাব্লুপি'র কয়েক ডজন ভাষার একটি তালিকা en.wikedia.org/wiki/Fold_(higher-order_function) রয়েছে এবং সি # এটিকেই "সমষ্টি" বলে calls "হ্রাস" হ'ল পরিষ্কার বিজয়ী, তার পরে এমএল পরিবারের জন্য "ভাঁজ" এবং ছোট্টকল এবং বন্ধুদের জন্য "ইনজেকশন"।
কেন

12
নামটি তার কার্যকারিতার বিষয়; এটি কীভাবে বাস্তবায়িত হয় তা অপ্রাসঙ্গিক। এবং এফডাব্লুআইডাব্লু, বাম ভাঁজগুলি যখন সম্ভব হয় পুনরাবৃত্তভাবে কার্যকর করা হয় ... সাধারণত লেজ পুনরাবৃত্তির মাধ্যমে কার্যকরী ভাষায়। এবং সি # এর একটি সঠিক ভাঁজ নেই, যা অংশটি একটি বোকা নাম তোলার ফলাফল - যদিও "মানচিত্রের" জন্য "নির্বাচন করুন" এর মতো খারাপ নয় - এবং বিদ্যমান কার্যকরী প্রযুক্তি উপেক্ষা করে। সমষ্টি হ'ল ওও রাজ্যে আরও পরিচিত শব্দ হিসাবে ... না, মোটেও নয়।
জিম বাল্টার

9
সত্যি কথা বলতে গেলে, আমি মনে করি না এটি মাইক্রোসফ্টের বিদ্যমান কার্যকরী প্রযুক্তি বা পরিভাষা সম্পর্কে অবজ্ঞা করে, তবে এটি ডাটাবেস অ্যাক্সেস এবং এসকিউএল এর পরিভাষার দিকে ঝোঁক, যা অনেক এন্টারপ্রাইজ প্রোগ্রামার সম্ভবত কার্যকরী প্রোগ্রামিং শর্তের চেয়ে বেশি পরিচিত।
রাভুআলহেমিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.