سؤال

من خلال استخدام عدد من لغات البرمجة والمكتبات، لاحظت مصطلحات مختلفة مستخدمة للعدد الإجمالي للعناصر في المجموعة.

ويبدو أن الأكثر شيوعا length, count, ، و size.

على سبيل المثال.

array.length
vector.size()
collection.count

هل هناك أي مصطلح مفضل لاستخدامه؟هل يعتمد ذلك على نوع المجموعة؟أي.قابل للتغيير/غير قابل للتغيير

هل هناك تفضيل لكونها خاصية بدلا من الطريقة؟

هل كانت مفيدة؟

المحلول

وLength() يميل للإشارة إلى عناصر متجاورة - سلسلة لديها طول على سبيل المثال.

وCount() يميل إلى الرجوع إلى عدد من العناصر في مجموعة اكثر مرونة.

وSize() يميل إلى الرجوع إلى حجم المجموعة، في كثير من الأحيان هذا يمكن أن يكون مختلفا عن الطول في حالات مثل ناقلات (أو سلاسل)، قد يكون هناك 10 حرفا في سلسلة، ولكن محجوز لتخزين 20. وله أيضا الرجوع إلى عدد من العناصر - تحقق المصدر / وثائق

وCapacity() - يستخدم للإشارة على وجه التحديد إلى المساحة المخصصة في جمع وليس عدد من عناصر صالحة في ذلك. إذا كان نوع على حد سواء "القدرة" و "حجم" محددة ثم "حجم" يشير عادة إلى عدد من العناصر الفعلية.

وأعتقد أن النقطة الرئيسية وصولا الى لغة البشر والتعابير، لا يبدو أن حجم سلسلة اضح جدا، في حين أن طول مجموعة مربكة بالتساوي على الرغم من أنها يمكن أن تستخدم للإشارة إلى الشيء نفسه ( عدد من العناصر) في جمع البيانات.

نصائح أخرى

وFWIW (وهذا قريب بزوال إلى لا شيء)، لكنني أفضل 'عدد' لأنه يبدو أنها تشير إلى أنه سيكون لإرجاع عدد العناصر / البنود في جمع جميلة unambigously.

وعندما تواجه مع "طول" شروط أو "الحجم" أنا كثيرا ما تركت يتساءل لحظة (أو حتى إجبارهم على إعادة قراءة الوثائق) ما إذا كان الشيء اللعين سوف يقول لي كم هي عناصر في كوكتيلات أو عدد البايتات جمع تستهلك. هذا صحيح بصفة خاصة للمجموعات التي تهدف إلى أن تكون contingous مثل صفائف أو سلاسل.

ولكن لا أحد الذي كان مسؤولا عن اصطلاحات التسمية المستخدمة من قبل جافا، BCL / صافي، أو C / C ++ القياسية أطر / المكتبات ازعجت أن يسألني، لذلك كنت كل عالقة مع كل ما جاء به.

إذا فقط كان لي أذكى بكثير مما أنا عليه الآن وكان اسمه بيارني، كل واحد منكم قد يكون بمنأى عن البؤس ...

وبطبيعة الحال، مرة أخرى في العالم الحقيقي، عليك أن تحاول التمسك بكل ما اصطلاح التسمية المستخدمة من قبل اللغة / منبر الذي تستخدمه (على سبيل المثال، size() في C ++). وهذا الأمر لا يبدو لمساعدتك في معضلة Array.Length الخاص بك.

المصطلحات قابلة للتبادل إلى حد ما، على الرغم من أنني في بعض المواقف أفضّل واحدًا على الآخر.عادةً يمكنك الحصول على أفضل استخدام إذا فكرت بذلك كيف تصف طول/حجم/عدد هذا العنصر لفظيًا لشخص آخر؟.

length() يعني أن العنصر له طول.السلسلة لها طول.أنت تقول "سلسلة مكونة من 20 حرفًا"، أليس كذلك؟لذلك لديه طول.

size() يعني أن العنصر له حجم.على سبيل المثالالملف له حجم.أنت تقول "حجم هذا الملف هو 2 ميغابايت"، أليس كذلك؟لذا فهو ذو حجم.

ومع ذلك، يمكن أن يكون للسلسلة أيضًا حجم، لكنني أتوقع شيئًا آخر هنا.على سبيل المثالقد يبلغ طول سلسلة UTF-16 100 حرف، ولكن نظرًا لأن كل حرف يتكون من بايتين، أتوقع أن يكون الحجم 200.

count() غير عادي للغاية.يستخدم Objective-C العد لعدد العناصر في المصفوفة.قد يجادل المرء إذا كان للمصفوفة طول (كما هو الحال في Java)، أو لها حجم (كما هو الحال في معظم اللغات الأخرى) أو لها عدد.ومع ذلك، قد يكون الحجم مرة أخرى هو الحجم بالبايت (إذا كانت عناصر الصفيف 32 بت، فكل عنصر هو 4 بايت) والطول...لن أقول "يتكون المصفوفة من 20 عنصرًا"، فهذا يبدو غريبًا بالنسبة لي.أود أن أقول "مصفوفة تحتوي على 20 عنصرًا".لست متأكدًا مما إذا كان العد يعبر عن ذلك بشكل جيد جدًا، ولكن أعتقد أن العد هنا هو صيغة مختصرة لـ elementCount() وهذا مرة أخرى أكثر منطقية بالنسبة للمصفوفة من length() أو size().

إذا قمت بإنشاء كائنات/عناصر خاصة بك في لغة برمجة، فمن الأفضل استخدام أي عناصر أخرى مماثلة تستخدمها، حيث أن المبرمجين معتادون على الوصول إلى الخاصية المطلوبة باستخدام هذا المصطلح.

وعدد أعتقد هو المصطلح الأكثر وضوحا لاستخدام إذا كنت تبحث عن عدد العناصر في مجموعة. ينبغي أن يكون واضحا حتى للمبرمجين الجدد الذين لم تصبح ملحقة خاصة إلى لغة معينة حتى الان.

وينبغي أن يكون الممتلكات، وهذا ما هو عليه: وصف (ويعرف أيضا باسم الملكية) من المجموعة. وهناك طريقة يعني أن عليها أن تفعل شيئا لجمع للحصول على عدد من البنود والذي يبدو مجرد unintuitive.

وهم ... أنا لن تستخدم الحجم. لأن هذا يمكن الخلط بينه وبين حجم بالبايت. طول - قد يبدو معقولا للصفائف، ما دام من المفترض أن استخدام بايت يترتب على ذلك من الذاكرة. على الرغم من ... طول ... في ماذا؟ العد واضح. كم عدد العناصر. وأود أن استخدام العد.

ومعلومات عن الملكية / طريقة، وأود أن استخدام خاصية للاحتفال انها سريعة، وطريقة للاحتفال انها بطيئة.

و، والأكثر أهمية - وأود أن عصا لمعايير اللغات / مكتبات كنت تستخدم

وإضافة إلى @ gbjbaanb في الجواب ...

إذا "الملكية" تعني وصول الجمهور إلى القيمة، وأود أن أقول أن "طريقة" ويفضل ببساطة لتوفير التغليف ولإخفاء التنفيذ.

هل يمكن تغيير لديك مانع حول كيفية count العناصر أو كيف يمكنك الحفاظ على أن count. وإذا كان من الممتلكات، وكنت عالقا - إذا تم acessed ذلك عبر طريقة، يمكنك تغيير تنفيذ الأساسية دون التأثير على المستخدمين من المجموعة

.

في إكسير هو في الواقع هناك نظام تسمية واضحة ترتبط معها عبر أنواع في اللغة.

<اقتباس فقرة>   

عند "عد" عدد العناصر في بنية البيانات، إكسير   تلتزم أيضا قاعدة بسيطة: يسمى وظيفة size إذا كان   العملية في وقت ثابت (أي القيمة مسبقا تحسب) أو   length إذا كانت العملية هي الخطية (أي حساب طول يحصل   أبطأ كإدخال ينمو).

للي، وهذا هو قليلا كمن يسأل عما إذا كان "foreach" أفضل من "لكل". ذلك يعتمد فقط على اللغة / الإطار.

أود أن أقول أن ذلك يعتمد على وجه الخصوص لغة التي تستخدمها و الطبقات.على سبيل المثال في C# إذا كنت تستخدم Array لديك ملكية الطول، إذا كان لديك شيء يرث من IEnumerable فلديك امتداد طريقة Count()، ولكنها ليست سريعة.وإذا ورثت من ICollection لديك ملكية عدد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top