সংগ্রহে বনাম দৈর্ঘ্যের বনাম আকার গণনা করুন


167

প্রচুর প্রোগ্রামিং ভাষা এবং লাইব্রেরি ব্যবহার করে আমি সংগ্রহের উপাদানগুলির মোট সংখ্যার জন্য ব্যবহৃত বিভিন্ন পদ লক্ষ্য করেছি।

সবচেয়ে সাধারণ হবে বলে মনে হচ্ছে length, countএবং size

যেমন।

array.length
vector.size()
collection.count

ব্যবহারের জন্য কি কোনও পছন্দসই শব্দ রয়েছে? এটি কী ধরণের সংগ্রহের উপর নির্ভর করে? অর্থাত। চপল / অপরিবর্তনীয়

এটি পদ্ধতির পরিবর্তে সম্পত্তি হিসাবে থাকার জন্য কি কোনও পছন্দ আছে?


এবং List.Capacityসি # তেও সম্পত্তি আছে ।
আরবিটি 0

আমি আশা করি নতুন ভাষাগুলি অস্পষ্ট পদগুলি এড়াতে পারবে।
নিকলে ক্লেমচুক

উত্তর:


231

Length() সামঞ্জস্যপূর্ণ উপাদানগুলি বোঝায় - উদাহরণস্বরূপ একটি স্ট্রিংটির দৈর্ঘ্য রয়েছে।

Count() একটি আলগা সংগ্রহের উপাদানগুলির সংখ্যা উল্লেখ করে।

Size() সংগ্রহের আকারটি বোঝায়, প্রায়শই এটি ভেক্টর (বা স্ট্রিং) এর মতো ক্ষেত্রে দৈর্ঘ্যের চেয়ে আলাদা হতে পারে, একটি স্ট্রিংয়ে 10 টি অক্ষর থাকতে পারে তবে স্টোরেজ 20 এর জন্য সংরক্ষিত থাকে It এটি সংখ্যার সাথে সম্পর্কিত হতে পারে উপাদান - চেক উত্স / ডকুমেন্টেশন।

Capacity()- নির্দিষ্টভাবে সংগ্রহের বরাদ্দ স্থান এবং এতে বৈধ উপাদানগুলির সংখ্যা নয় উল্লেখ করে। টাইপটিতে "ক্ষমতা" এবং "আকার" উভয়ই সংজ্ঞায়িত থাকে তবে "আকার" সাধারণত প্রকৃত উপাদানগুলির সংখ্যাকে বোঝায়।

আমি মনে করি মূল বক্তব্যটি মানুষের ভাষা এবং রীতিমতো নয়, একটি স্ট্রিংয়ের আকার খুব সুস্পষ্ট বলে মনে হচ্ছে না, যদিও একটি সেটের দৈর্ঘ্য সমান বিভ্রান্তিকর হলেও যদিও তারা একই জিনিসকে বোঝাতে ব্যবহৃত হতে পারে (উপাদানগুলির সংখ্যা) ) তথ্য সংগ্রহের ক্ষেত্রে in


5
সুতরাং একটি "আলগা সংগ্রহ" কি? আমি এখানে আকার এবং গণনার মধ্যে পার্থক্য দেখছি না।
সোফি আল্পার্ট

32
@ বেন: আকার = উপলব্ধ স্লট, গণনা = প্রকৃত উপাদান। আকার == সংগ্রহ পূর্ণ হলে গণনা করুন।
স্টিভেন এভার্স

8
ডাউনভোটিং কারণ size()ভেক্টরের উপাদানগুলির সংখ্যা বোঝায়, এটির নয়capacity() ... কমপক্ষে সি ++ এ, যা আমার মনে হয় এস vectorএর সাথে sizeএর এর প্রবর্তক ।
ডেভ আব্রাহামস

10
@ ডেভ অ্যাব্রাহামস - আমি কখনও বলিনি যে এটি ছিল। এটি আবার পড়ুন। আমি বলেছিলাম যে এটি "রেফারেন্স দেয়", আমি এমনকি কোনও নির্দিষ্ট বিবৃতি দেওয়ার চেষ্টাও করি নি যা সমস্ত ভাষায় সমস্ত সংগ্রহের শ্রেণীর অনুমতিগুলিতে সমানভাবে প্রযোজ্য।
gbjbaanb

2
@ স্নোফারস আমি মনে করি আপনি সেখানে "সক্ষমতা" এর রাজ্যে চলে গেছেন। std::vector(সি ++) উদাহরণস্বরূপ "ক্ষমতা" এবং "আকার" ব্যবহার করে যেখানে আপনি যথাক্রমে "আকার" এবং "গণনা" ব্যবহার করেন। আসলে, সবকিছু মধ্যে std::ব্যবহার করে "আকার" বর্তমান উপাদান গণনা, এমনকি std::string(যা ফর্মা সামঞ্জস্য এবং একটি সম্পূর্ণ অভিন্ন জন্য ... মানুষের সুবিধার "দৈর্ঘ্য" আমি অনুমান জন্য "আকার" প্রদান করে)।
জেসন সি

28

এফডব্লিউআইডাব্লু (এবং এটি নির্দ্বিধায় কিছুতেই কাছে নেই), আমি 'গণনা' পছন্দ করি কারণ এটি ইঙ্গিত করে যে এটি সংগ্রহে থাকা উপাদানগুলি / আইটেমগুলির সংখ্যা বেশ স্পষ্টতই ফিরে আসবে বলে মনে হয়।

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

তবে জাভা, বিসিএল /। নেট, বা সি / সি ++ স্ট্যান্ডার্ড ফ্রেমওয়ার্ক / লাইব্রেরি দ্বারা ব্যবহৃত নামকরণ কনভেনশনের দায়িত্বে থাকা কেউই আমাকে জিজ্ঞাসা করতে বিরক্ত করেন নি, সুতরাং তারা যা কিছু সামনে এসেছিল তাতে আপনি সকলেই আটকে রয়েছেন।

কেবল যদি আমি আমার চেয়ে অনেক বেশি স্মার্ট হয়ে থাকতাম এবং নাম রাখি হত বর্জনে, আপনারা সবাই হয়ত এই দুর্দশা থেকে রক্ষা পেতে পারেন ...

অবশ্যই, সত্যিকারের জগতে, আপনি যে ভাষা / প্ল্যাটফর্মটি ব্যবহার করছেন (উদাহরণস্বরূপ, size()সি ++ তে) নামকরণের কনভেনশন ব্যবহার করা উচিত তার সাথে তাল মিলিয়ে চলার চেষ্টা করা উচিত । এটি আপনাকে আপনার Array.Lengthদ্বিধাদ্বন্দ্বের সাথে সহায়তা করবে বলে মনে হয় না ।


16
দৈর্ঘ্য এবং আকার বিশেষ্য হিসাবে, গণনাও একটি ক্রিয়া, সুতরাং এটি রানটাইম (ও (এন)) বনাম একটি মান (ও (1)) গণনা হিসাবে ব্যাখ্যা করা যেতে পারে।
এমবিএক্স

প্রকৃতপক্ষে, এটি লিনকিউ
এডওয়ার্ড

11

পদগুলি কিছুটা বদলযোগ্য, যদিও কিছু পরিস্থিতিতে আমি একে অপরের চেয়ে বেশি পছন্দ করব। সাধারণত আপনি সর্বোত্তম ব্যবহার পেতে পারেন যদি আপনি এই উপাদানটির দৈর্ঘ্য / আকার / গণনাটি অন্য ব্যক্তির কাছে কীভাবে বর্ণনা করবেন?

length()বোঝায় যে উপাদানটির দৈর্ঘ্য রয়েছে has একটি স্ট্রিং একটি দৈর্ঘ্য আছে। আপনি বলছেন "একটি স্ট্রিং 20 অক্ষর দীর্ঘ", তাই না? সুতরাং এটি একটি দৈর্ঘ্য আছে।

size()ইঙ্গিত দেয় যে উপাদানটির একটি আকার রয়েছে। যেমন একটি ফাইলের আকার থাকে। আপনি বলছেন "এই ফাইলটির আকার 2 এমবি আছে", তাই না? সুতরাং এটি একটি আকার আছে।

এটি বলেছিল, একটি স্ট্রিংয়েরও আকার থাকতে পারে তবে আমি এখানে অন্য কিছু আশা করতে পারি। উদাহরণস্বরূপ, ইউটিএফ -16 স্ট্রিংটির দৈর্ঘ্য 100 অক্ষর হতে পারে, তবে প্রতিটি চরিত্র দুটি বাইটের মধ্যে রচিত হওয়ায় আমি আকারটি 200 হওয়ার আশা করব।

count()খুব অস্বাভাবিক। উদ্দেশ্য-সি অ্যারেতে উপাদানের সংখ্যার জন্য গণনা ব্যবহার করে। যে কোনও অ্যারেটির দৈর্ঘ্য (জাভা হিসাবে) থাকে, এর আকার (বেশিরভাগ অন্যান্য ভাষার মতো) থাকে বা তার একটি গণনা থাকে তবে কেউ বিতর্ক করতে পারে। তবে আকারটি আবার বাইটের আকার হতে পারে (অ্যারে আইটেমগুলি 32 বিট ইনট হয়, প্রতিটি আইটেমটি 4 বাইট হয়) এবং দৈর্ঘ্য ... আমি বলব না "অ্যারেটি 20 টি উপাদান দীর্ঘ লম্বা", যা এটির চেয়ে অদ্ভুত বলে মনে হচ্ছে আমাকে. আমি বলব "অ্যারেতে 20 টি উপাদান রয়েছে"। আমি নিশ্চিত না যে গণনা খুব ভালভাবে প্রকাশ করে তবে আমি মনে করি গণনাটি এখানে একটি সংক্ষিপ্ত রূপelementCount() এবং এটি আবার দৈর্ঘ্যের () বা আকার () এর চেয়ে অ্যারের জন্য আরও বেশি অর্থবোধ করে।

আপনি যদি কোনও প্রোগ্রামিং ভাষায় নিজস্ব অবজেক্ট / উপাদান তৈরি করেন তবে প্রোগ্রামাররা সেই শব্দটি ব্যবহার করে পছন্দসই সম্পত্তি অ্যাক্সেস করতে ব্যবহৃত হওয়ায় অন্যান্য অনুরূপ উপাদানগুলি ব্যবহার করা ভাল।


আপনার স্ট্রিং সাদৃশ্য অনুসরণ করে একটি ফাইলের অবশ্যই একটি অবশ্যই থাকতে lengthপারে তবে বিভিন্ন স্টোরাগুলি sizesএর ডেটা সংরক্ষণের জন্য বিভিন্ন ব্যবহার করতে পারে । জাভাও java.io.File # দৈর্ঘ্য () তেও তাই মনে করে , তবে মনে হয় পৃথিবীর বাকি অংশগুলি এতে একমত নয়।
ইভান বালাসভ

1
@ ইভানবালাশভ আমি প্রতিদিনের আলাপে কখনও "ফাইলের দৈর্ঘ্য" ব্যবহার করি নি, আমার জন্য একটি ফাইলের দৈর্ঘ্য ছাড়া আকারের কিছু নেই এবং আমি আমার উত্তরে যা লিখেছিলাম তাও। আমরা যখনই কাঁচা বাইটের কথা বলছি তখন আমরা আকারের আইএমএইচও-র কথা বলছি এবং কোনও সুনির্দিষ্ট নির্দিষ্ট সামগ্রী নয় এমন একটি ফাইল কেবল বাইটের একগুচ্ছ। দৈর্ঘ্য সাধারণত বাইট গণনা প্রকাশ করার জন্য ব্যবহার করা হয় না তবে একসাথে স্ট্রিংযুক্ত উপাদানগুলির সংশ্লেষ প্রকাশ করার জন্য ব্যবহৃত হয় (বাইটগুলি আমার কাছে উপাদান নয়, উপাদান গঠনের আরও বেশি বিল্ডিং ব্লক এবং তারা "একসাথে স্ট্রিংড" হয় না)।
মক্কি

4

আপনি যদি কোনও সংগ্রহে আইটেমের সংখ্যাটি সন্ধান করেন তবে গণনা আমার মনে হয় সবচেয়ে স্পষ্ট শব্দ। এটি এমনকি নতুন প্রোগ্রামারদের কাছে স্পষ্ট হওয়া উচিত যারা এখনও কোনও প্রদত্ত ভাষার সাথে বিশেষভাবে যুক্ত হননি।

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


3

হুম ... আমি আকার ব্যবহার করব না। কারণ এটি বাইট আকারে বিভ্রান্ত হতে পারে। দৈর্ঘ্য - অ্যারেগুলির জন্য কিছুটা ধারণা তৈরি করতে পারে, যতক্ষণ তারা মেমরির ফলস্বরূপ বাইট ব্যবহার করার কথা বলে। যদিও ... দৈর্ঘ্য ... কোনটি? গণনা পরিষ্কার। কত উপাদান। আমি গণনা ব্যবহার করব।

সম্পত্তি / পদ্ধতি সম্পর্কে, আমি এটিকে দ্রুত চিহ্নিত করার জন্য সম্পত্তি এবং এটির ধীর চিহ্নিত করার পদ্ধতি ব্যবহার করব।

এবং, সর্বাধিক গুরুত্বপূর্ণ - আপনি যে ভাষা / গ্রন্থাগারগুলি ব্যবহার করছেন তার মানগুলিতে আমি আঁকিব।


সুতরাং একটি ডাটাব্লক সম্পর্কে কি, বাইটের একগুচ্ছ। এটির দৈর্ঘ্য রয়েছে নাকি আকার রয়েছে?
মক্কি

2

@ Gbjbaanb এর উত্তরে যুক্ত করা হচ্ছে ...

যদি "সম্পত্তি" মানটিতে জনসাধারণের অ্যাক্সেসের ইঙ্গিত দেয় তবে আমি বলব যে কেবল "এনক্যাপসুলেশন সরবরাহ করতে এবং প্রয়োগকে আড়াল করার জন্য" পদ্ধতি "পছন্দ করা হয়।

কীভাবে countউপাদানগুলি বা কীভাবে আপনি এটি বজায় রাখবেন সে সম্পর্কে আপনার মন পরিবর্তন হতে পারে count। যদি এটি কোনও সম্পত্তি হয় তবে আপনি আটকে রয়েছেন - যদি কোনও পদ্ধতির মাধ্যমে এটি অ্যাক্সেস করা হয় তবে আপনি সংগ্রহের ব্যবহারকারীদের প্রভাবিত না করেই অন্তর্নিহিত বাস্তবায়ন পরিবর্তন করতে পারেন।


সম্পত্তি হিসাবে প্রকাশিত হলে আপনি কেন "আটকে" আছেন? সম্পত্তিগুলির একটি অন্তর্নিহিত বাস্তবায়ন থাকে যা ইন্টারফেসটি না ভেঙে কেবল সহজেই পরিবর্তন করতে পারে। প্রকৃতপক্ষে, বেশিরভাগ ভাষাগুলি সংস্থাপক হিসাবে গেট / সেট পদ্ধতি নির্ধারিত হিসাবে বৈশিষ্ট্যগুলি প্রয়োগ করে ... আপনি কেবল তাদের সরাসরি কল করতে পারবেন না।
স্কট ডরম্যান

আপনি কোন "সর্বাধিক ভাষা" উল্লেখ করছেন? সি, সি ++, জাভা (কেবলমাত্র কয়েকটি নাম দেওয়ার জন্য) এটি করবেন না। রুবি এবং গ্রোভী আমি জানি। দয়া করে নোট করুন আমি কীভাবে উত্তরটি শুরু করেছি: "যদি 'সম্পত্তি' বোঝায় ..." কেন আটকা পড়েছেন? শ্রেণীর ইন্টারফেসটি পরিবর্তিত হলে, ক্লায়েন্টদের পরিবর্তন করতে হবে (সাধারণভাবে বলতে হয়)
কেন জেন্টল

1

এলিক্সির ভাষায় এটির সাথে সম্পর্কিত একটি স্পষ্ট নামকরণ প্রকল্প রয়েছে।

যখন একটি ডেটা স্ট্রাকচারের উপাদানগুলির সংখ্যা "গণনা" করা হয়, এলিক্সির একটি সাধারণ নিয়মও মেনে চলে: ক্রিয়াকলাপটির নামকরণ করা হয় sizeযদি ক্রিয়াকলাপ স্থির সময়ে থাকে (যেমন মানটি প্রাক-গণনা করা হয়) বা lengthঅপারেশনটি লিনিয়ার হয় (যেমন গণনা করা হয়) ইনপুট বাড়ার সাথে সাথে দৈর্ঘ্য ধীর হয়ে যায়)।


0

আমার কাছে এটি "ফরচ" "" প্রত্যেকের জন্য "চেয়ে ভাল কিনা তা জিজ্ঞাসার মতোই। এটি কেবল ভাষা / কাঠামোর উপর নির্ভর করে।


এবং, এটি কি ব্যাপার? কি পরিবর্তন? আমরা সবাই জাভা লোকদের দু'জনকে বাছাই করা এবং অসম্পূর্ণ হওয়ার জন্য ক্রুদ্ধ ইমেলগুলি লিখছি?
এস .লট

1
এটাই আমার বক্তব্য। কেন আশ্চর্য যে ভাল। এটা কি হয়।
ইবিগ্রিন

0

আমি বলব যে এটি আপনি যে ভাষা ব্যবহার করছেন এবং ক্লাস করছেন তার উপর নির্ভর করে । উদাহরণস্বরূপ সি # এ আপনি যদি অ্যারে ব্যবহার করছেন তবে আপনার সম্পত্তি দৈর্ঘ্য রয়েছে, যদি আপনার কাছে কিছু পরিমাণ থাকে যা উত্তরাধিকার সূত্রে উত্তরাধিকার সূত্রে প্রাপ্ত হয় তবে আপনার সম্প্রসারণ পদ্ধতি গণনা () রয়েছে তবে এটি দ্রুত নয়। এবং আপনি যদি আইকোলিকেশন থেকে উত্তরাধিকার সূত্রে পান তবে আপনার সম্পত্তি গণনা রয়েছে।

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