কীভ্যালিউপিয়ারের তুলনায় টিপল ব্যবহার করা কখন ভাল?


90

আমি সাধারণত KeyValuePair<TKey,TValue>যখনই আমার কাছে ডেটা থাকি তখন এই টাইপটি ব্যবহার করি যা এই যুক্তিতে যুক্ত হয় যে একটি অন্যটির চাবি। যদি ডেটা সম্পর্কযুক্ত না হয় তবে Tuple<T1,T2>প্রকারটি আরও বেশি অর্থবোধ করে এবং আমি সে সাথে যাব।

এখন আমি কেন সাধারণত এড়ানো এবং পছন্দ করি সে সম্পর্কে এই নিবন্ধটি পড়েছি । প্রাথমিক যুক্তি কার্যকারিতা লাভ হচ্ছে ।KeyValuePair<TKey,TValue>Tuple<T1,T2>Tuple<T1,T2>

পারফরম্যান্সের বাইরে, কোনও কারণের চেয়ে কেভিপি আরও ভাল পছন্দ হতে পারে Tuple<T1,T2>?


4
KeyValuePairএকটি কী এবং একটি মান, একটি Tuple<T1,T2>হ'ল সমান মানগুলির একটি জোড়া । আপনি আরও জিজ্ঞাসা করতে পারেন: " List<Class>আমি যদি ব্যবহার করতে পারি তবে আমি কেন ব্যবহার করব Dictionary<A,B>"।
টিম শ্মেলেটার

4
ঠিক আছে, তবে সেক্ষেত্রে আপনি ডেটা সন্ধান করতে কীটি ব্যবহার করতে পারেন। এর অর্থ কিছু। এই ক্ষেত্রে, নামগুলি কেবল শব্দার্থবিজ্ঞানের, তাদের কোনও অর্থ নেই (প্রসেসরের কাছে))
নিক গটচ

4
একটি টিপল সমান মানগুলির জুড়ি নয়, তবে কিছু সংখ্যক সমান প্রকারের। হতে পারে এটি নিটপিকিং হিসাবে দেখা যায়, তবে সি সি সমান মানের বিভিন্ন উপস্থাপনের জন্য ইউনিয়ন গঠন করে const :)
জোনাস

উত্তর:


65

ওয়েল, টাইপটি খারাপ নাম হিসাবে বিবেচনা করা যেতে পারে, এক জন্য। নাম অনুসারে একটি কীভ্যালিউপিয়ারে একটি কী এবং একটি মান উপস্থাপন করা উচিত। আপনার দুটি বস্তু যদি সত্যই কী এবং মান না হয় তবে কেবল দুটি জিনিস? যদি আমি এমন কোনও পদ্ধতি বা সম্পত্তি দেখতে পাই যার মধ্যে একটি প্রকার থাকে তবে KeyValuePair<TKey, TValue>আমি কেভিপি-র মানগুলি কী এবং মান হিসাবে প্রত্যাশা করতাম। এটি সত্যিই অভিপ্রায়টি যোগাযোগ করার এবং ভবিষ্যতে নিজের কাছে সম্ভবত বা অন্যান্য দলের সদস্যদের কাছে পরিষ্কার করার বিষয়। একটি tuple এই ধরনের সংযোগ নির্দেশ করে না।

টিপলস এটিকে একটি 3-টিপল (বা একটি ট্রিপলেট, তবে আপনি এটি কল করতে চান) তৈরি করে অন্য মান যুক্ত করা আরও সহজ করে। কিছু। নেট ভাষা যেমন এফ # এর মতো টিউপসগুলিতেও বিশেষ সিনট্যাক্স থাকে।

একটি বাস্তবায়ন দৃষ্টিকোণ জন্য, Tupleঅনেক কিছুই KeyValuePairনা। টিপলগুলি তুলনীয়, এগুলি IComparableএবং IStructuralEquatableইন্টারফেস প্রয়োগ করে , তাই এটি দুটি টিপল তুলনা করা আরও সহজ করে তোলে।


4
আপনি কীভ্যালিউ পেয়ারগুলিকে একটি অভিধানে রাখতে পারেন এমন শক্ত উপায়টি আমি খুঁজে পেয়েছি তবে এর পরে আর কোনও ফল পাবেন না।
এমকেস্পার

4
এছাড়াও, নতুন সি # 7.0 টিপলসের জন্য নতুন, সরল সিনট্যাক্সকে সমর্থন করে, কীভ্যালিউপায়ার্সের তুলনায় এগুলিকে আরও সহজ এবং পরিশ্রমী করে তোলে। ভিজ্যুজিস্টুডিওমাগাজাইন
জ্যাকব

4
এছাড়াও, টিপলগুলিতে প্যারামিটারগুলির নাম দেওয়ার ক্ষমতা ভোক্তার পক্ষে তাদের কী ব্যবহার করা উচিত বলে তা বোঝা সহজ করে। কেভিপির মতো জেনেরিকের মধ্যে এটি আসলে কারও অনুমান - এটি নির্দিষ্টভাবে কোথাও নথিভুক্ত করা না হলে - মূল কীটি "হওয়ার" কথা বলে মনে করা হয় - অর্থাত্ এটির ধরণ নয় তবে এটি কোন আসল-জগতের জিনিস, যেমন একটি সেটিং নাম, একটি সামাজিক নিরাপত্তা নম্বর, ইত্যাদি
rory.ap

40

KeyValuePairকাঠামোযুক্ত এবং Tupleএকটি বর্গ।

এটিই মূল পার্থক্য যা প্রভাবগুলিকে কীভাবে রেফারেন্স বা মান অনুসারে কপি করা হয় তা প্রভাবিত করে।

এবং তাই Tuple<T1,T2>যখন প্রায় পাশ করা হয় কেবল 32 বিবিটি ওএসে "4 বাইট" ব্যবহার করে, যেখানে KeyValuePair<K,V>"কে এবং ভি" এর উপর ভিত্তি করে আরও বেশি প্রয়োজন

উভয়ই টুপল এবং কীভ্যালু পেয়ারের তুলনা করা ভাল ধারণা নয় (যেহেতু আমার পক্ষে কোনও অর্থ হয় না) যেহেতু উভয়ই ভিন্ন উদ্দেশ্য উপভোগ করে।


4
তারা কিভাবে একটি ভিন্ন উদ্দেশ্য পরিবেশন? আপনি কি দয়া করে এ সম্পর্কে বিস্তারিত বলবেন?
ওল্ডস্কুল

4
@ ইয়াকরঙ্গি কিভালুয়েপায়ার বলতে বোঝানো হয়েছে একটি অভিধানে কী এবং মানগুলির ধারক হিসাবে ব্যবহৃত হয় অন্যথায় এটি কোনও উদ্দেশ্য করে না। অন্যদিকে টুপল যেকোন যথেচ্ছ সম্পর্কিত সদস্যকে একসাথে সঞ্চয় করতে ব্যবহার করা যেতে পারে। টুপলের সাহায্যে আপনি কেবল ২ টি নয়, এক সাথে একাধিক সদস্য সঞ্চয় করতে পারবেন
শ্রীরাম সাখাটিভেল

@ শ্রীরামস্যাক্টিভিল এর অর্থ, ওপি প্রশ্নের উত্তর হ'ল: আপনি যদি কোনও অভিধান ব্রাউজ না করেন তবে কেভিপি ব্যবহার করবেন না।
অ্যালেক্স Fainshtein

23

শব্দার্থক সত্ত্বেও, আপনি উভয় বিকল্প বিবেচনা করার সময় পারফরম্যান্স একটি গুরুত্বপূর্ণ বিবেচনা হতে পারে। পূর্বে উল্লিখিত হিসাবে, KeyValuePairমানটি একটি মান প্রকার (কাঠামো), যেখানে এটি Tuple<>একটি রেফারেন্স টাইপ (শ্রেণি)। অতএব, KeyValuePairস্ট্যাকের Tuple<>জন্য বরাদ্দ করা হয় এবং গাদাতে বরাদ্দ করা হয়, এবং সর্বোত্তম পছন্দটি সাধারণত স্ট্যাক বনাম হিপ মেমরি বরাদ্দের ক্লাসিক যুক্তি দ্বারা নির্ধারিত হয় । সংক্ষেপে, স্ট্যাক স্পেস সীমিত, তবে সাধারণত খুব দ্রুত অ্যাক্সেস থাকে। হিপ মেমরিটি অনেক বড় তবে কিছুটা ধীর।

KeyValuePair<T1, T2>উভয় কী এবং মান ধরনের প্রিমিটিভের (মান ধরনের মত ভাল পছন্দ হতে পারে int, bool, double, ইত্যাদি) বা ছোট আকারের structs মধ্যে। স্ট্যাকের আদিম ধরণের সাথে, বরাদ্দ এবং অবনতি দ্রুত বজ্রপাত হয়। এটি সত্যিই কর্মক্ষমতাকে প্রভাবিত করতে পারে, বিশেষত পুনরাবৃত্ত পদ্ধতি কলগুলির যুক্তি হিসাবে।

অন্যদিকে, Tuple<T1, T2>সম্ভবত হয় আরও ভাল পছন্দ যদি হয় হয় T1বা T2হয় রেফারেন্স ধরণের (ক্লাসের মতো)। একজন KeyValuePairসেই রেফারেন্স ধরনের পয়েন্টার রয়েছে (মূল বা মূল্য ধরনের হিসাবে) নষ্ট সাজানোর বস্তু যেহেতু উদ্দেশ্য যাহাই হউক না কেন গাদা উপর দিকে তাকিয়ে করা প্রয়োজন হবে না।

আমি অনলাইনে খুঁজে পেয়েছি এমন একটি মাপদণ্ড এখানে: টিপল বনাম, কীভেলিউপায়ার । এই বেঞ্চমার্ক সঙ্গে একমাত্র সমস্যা হল তারা পরীক্ষিত হয় KeyValuePair<string, string>বনাম Tuple<string, string>, এবং stringটাইপ .NET একটি অস্বাভাবিক এবং বিশেষ ধরনের মধ্যে যে এটি একটি মান টাইপ এবং / অথবা সঞ্চালনের প্রসঙ্গ উপর নির্ভর করে একটি রেফারেন্স টাইপ মত উভয় আচরণ করতে পারে। আমি বিশ্বাস করি যে এর KeyValuePair<int, int>বিপক্ষে স্পষ্ট বিজয়ী হতেন Tuple<int, int>। এমনকি স্বল্পতা থাকলেও ফলাফলগুলি দেখায় যে পারফরম্যান্সের পার্থক্যগুলি উল্লেখযোগ্য হতে পারে:

8.23 এনএস - টিপল
0.32 এনএস বরাদ্দ করুন - কীভ্যালু পেয়ার বরাদ্দ করুন (25x দ্রুত!)

1.93 এনএস - আর্গুমেন্ট
2.57 এনএস হিসাবে টুপল পাস - আর্গুমেন্ট হিসাবে কীভ্যালিউপায়ার পাস করুন

1.91 এনএস - রিটার্ন টুপল
6.09 এনএস - রিটার্ন কীভ্যালিউপায়ার

2.79 এনএস - তালিকা
4.18 এনএস থেকে টিপল লোড করুন - তালিকা থেকে কীভ্যালু পেয়ার লোড করুন


0

আপনার সত্যিকারের ভুল প্রশ্নটি জিজ্ঞাসা করা যথাযথ প্রশ্ন একটি স্ট্রাক্ট (কেভিপি) এর চেয়ে ভাল একটি ক্লাস (টিপল) _ ব্যবহার করা হচ্ছে সেই ক্ষেত্রে উত্তরটি হ'ল আপনি তাদের কী ব্যবহার করতে চান এবং উত্তর এখানে শ্রেণি বনাম স্ট্রাক্টস দেওয়া হয়েছে


4
তিনি সঠিক প্রশ্ন করলেন। কোনটি ব্যবহারের জন্য স্পষ্টভাবে বোঝানো হয়েছে তার পক্ষে আরও ভাল।
গ্রেগ

@ গ্রেগ প্রশ্নটি হ'ল ভাল চকোলেট বা সোডা, তবে সুনির্দিষ্ট প্রশ্নটি অর্থহীন এবং ভাল খাবার এবং পানীয় সম্পর্কিত সাধারণ প্রশ্ন হিসাবে সম্বোধন করা হয়
মাইকটি

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