.NET এ মানচিত্র এবং হ্রাস করুন


উত্তর:


298

মানচিত্র এবং হ্রাসের লিনাক সমতুল্য: আপনি যদি লিনক রাখার পক্ষে যথেষ্ট ভাগ্যবান হন তবে আপনার নিজের মানচিত্রটি লেখার প্রয়োজন নেই এবং ফাংশনগুলি হ্রাস করতে হবে। সি # 3.5 এবং লিনকের ইতিমধ্যে এটি বিভিন্ন নামে রয়েছে।

  • মানচিত্রটি হ'ল Select:

    Enumerable.Range(1, 10).Select(x => x + 2);
  • হ্রাস হ'ল Aggregate:

    Enumerable.Range(1, 10).Aggregate(0, (acc, x) => acc + x);
  • ফিল্টারটি হ'ল Where:

    Enumerable.Range(1, 10).Where(x => x % 2 == 0);

https://www.justinshield.com/2011/06/mapreduce-in-c/


1
অনুবাদটি সঠিক তবে এটি একটি মূল বিষয় মিস করেছে। মানচিত্র কমাতে পরিবর্তন পদক্ষেপটি মানচিত্র-হ্রাসের ক্ষেত্রে গুরুত্বপূর্ণ তবে নামটিতে প্রদর্শিত হবে না যার জন্য কোনও কোড লিখতে হবে না। এটি সম্পূর্ণরূপে কী দ্বারা চালিত হয় যা মানচিত্রের ধাপে উত্তোলিত হয়। জোয়েল মার্টিনেজের উত্তরটি আমার মতে আরও ভালভাবে তুলে ধরেছে।
xtofs

2
লিঙ্কটি কাজ করছে না, সঠিক লিঙ্কটি হ'ল: justinshield.com/2011/06/mapreduce-in-c
আলেকজান্দ্রু-ড্যান পপ

12
ওহ, কেন তারা কেবল এটির Reduceপরিবর্তে ডাকবে না Aggregate... এমএস কেবল প্রোগ্রামারদের বিরক্ত করতে পছন্দ করে
জন হেন্কেল

13
@ জনহেন্কেল, আমি অবশ্যই একটি অনুমোদিত উত্স নই, তবে আমি নিশ্চিত যে এটি এসকিউএল থেকে এসেছে। আমি বিশ্বাস করি যে লিনকটি মূলত সি # তে স্ক্যুএল এর সাথে ইন্টারঅ্যাক্ট করার একটি উপায় হিসাবে কেনা হয়েছিল। আপনি যখন সেই বিশ্বে ফাংশনগুলির নাম দিচ্ছেন, যখন নির্বাচন এবং গ্রুপ বাইয়ের মতো জিনিসের সাথে তুলনা করা হয় তখন সমষ্টি "হ্রাস" এর চেয়ে কিছুটা বেশি পরিচিত হতে শুরু করে। আমি এটি ঠিক বলছি না, এটি আমাকে শেষ পর্যন্ত বিরক্ত করে তবে আমি ধারণা করি যে এটিই এর কারণ।
এলিয়ট ব্ল্যাকবার্ন

18

মানপ্রেডুস স্টাইল সমাধানের জন্য যে শ্রেণীর সমস্যার জন্য উপযুক্ত তা হ'ল সমষ্টিগত সমস্যা reg একটি ডেটাসেট থেকে ডেটা আহরণের Of সি # তে, কেউ এই স্টাইলে প্রোগ্রামের জন্য লিনকিউ ব্যবহার করতে পারে।

নিম্নলিখিত নিবন্ধ থেকে: http://codecube.net/2009/02/mapreduce-in-c-used-linq/

গ্রুপবাই পদ্ধতি মানচিত্র হিসাবে কাজ করছে, যখন নির্বাচন পদ্ধতিটি মধ্যবর্তী ফলাফলগুলিকে ফলাফলের চূড়ান্ত তালিকার মধ্যে হ্রাস করার কাজ করে।

var wordOccurrences = words
                .GroupBy(w => w)
                .Select(intermediate => new
                {
                    Word = intermediate.Key,
                    Frequency = intermediate.Sum(w => 1)
                })
                .Where(w => w.Frequency > 10)
                .OrderBy(w => w.Frequency);

বিতরণ করা অংশের জন্য, আপনি DryadLINQ পরীক্ষা করতে পারেন: http://research.microsoft.com/en-us/projects/dryadlinq/default.aspx


3

যেহেতু আমি কখনোই মনে করতে পারেন যে LINQ এটা কল Where, Selectএবং Aggregateপরিবর্তে Filter, Mapএবং Reduceতাই আমি কয়েক এক্সটেনশন পদ্ধতি নির্মিত আপনি ব্যবহার করতে পারেন:

IEnumerable<string> myStrings = new List<string>() { "1", "2", "3", "4", "5" };
IEnumerable<int> convertedToInts = myStrings.Map(s => int.Parse(s));
IEnumerable<int> filteredInts = convertedToInts.Filter(i => i <= 3); // Keep 1,2,3
int sumOfAllInts = filteredInts.Reduce((sum, i) => sum + i); // Sum up all ints
Assert.Equal(6, sumOfAllInts); // 1+2+3 is 6

এখানে 3 টি পদ্ধতি ( https://github.com/cs-util-com/cscore/blob/master/CsCore/PlainNetClassLib/src/Plugins/CsCore/com/csutil/collections/IEnumerableExtensions.cs থেকে ):

public static IEnumerable<R> Map<T, R>(this IEnumerable<T> self, Func<T, R> selector) {
    return self.Select(selector);
}

public static T Reduce<T>(this IEnumerable<T> self, Func<T, T, T> func) {
    return self.Aggregate(func);
}

public static IEnumerable<T> Filter<T>(this IEnumerable<T> self, Func<T, bool> predicate) {
    return self.Where(predicate);
}

Https://github.com/cs-util-com/cscore#ienumerable- এক্সটেনশন থেকে আরও কিছু বিশদ :

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.