আমার ক্রমিক সংগ্রহটি সূচক 0 বা সূচক 1 এ শুরু হওয়া উচিত?


25

আমি এমন এক ডিভাইসের জন্য একটি অবজেক্ট মডেল তৈরি করছি যার একাধিক চ্যানেল রয়েছে। ক্লায়েন্ট এবং আমি মধ্যে ব্যবহার বিশেষ্য হয় Channelএবং ChannelSet। ("সেট" শব্দার্থগতভাবে সঠিক নয়, কারণ এটি অর্ডার করা হয়েছে এবং একটি সঠিক সেট নয় But তবে এটি অন্য সময়ের জন্য সমস্যা))

আমি সি # ব্যবহার করছি। এখানে এর ব্যবহারের উদাহরণ রয়েছে ChannelSet:

// load a 5-channel ChannelSet
ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json");

Console.Write(channels.Count);
// -> 5

foreach (Channel channel in channels) {
    Console.Write(channel.Average);
    Console.Write(",  ");
}
// -> 0.3,  0.3,  0.9,  0.1,  0.2

সবই ড্যান্ডি। তবে, ক্লায়েন্টরা প্রোগ্রামার নয় এবং তারা একেবারে শূন্য সূচক দ্বারা বিভ্রান্ত হবে - প্রথম চ্যানেলটি তাদের কাছে চ্যানেল 1। তবে, সি # এর সাথে ধারাবাহিকতার জন্য, আমি ChannelSetশূন্য থেকে সূচকে রাখতে চাই

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

চ্যানেল 13 বা 12?

যে Saveবোতামটি শেষ পর্যন্ত কিছু কোডের ফলাফল হতে চলেছে। যদি ChannelSet1 সূচকযুক্ত হয়:

channels.GetChannel(13).SomeProperty = newValue;  // notice: 13

বা এটি যদি শূন্য সূচকযুক্ত হয়:

channels.GetChannel(12).SomeProperty = newValue;  // notice: 12

আমি কীভাবে এটি পরিচালনা করব তা নিশ্চিত নয়। আমি মনে করি যে অর্ডার করা, পূর্ণসংখ্যার-সূচকযুক্ত জিনিসগুলি ( ChannelSet# ChannelSet) সি # মহাবিশ্বের সমস্ত অ্যারে এবং তালিকা ইন্টারফেসের সাথে সামঞ্জস্য রাখার জন্য এটি ভাল অনুশীলন (শূন্য সূচক দ্বারা )। তবে তারপরে ইউআই এবং ব্যাকএন্ডের মধ্যে প্রতিটি কোডের জন্য একটি অনুবাদের প্রয়োজন হবে (1 দ্বারা বিয়োগ) এবং আমরা সবাই জানি ইতিমধ্যে কতটা কুখ্যাত এবং সাধারণ একের পর এক ত্রুটি।

তো, এমন কোনও সিদ্ধান্ত কি কখনও আপনাকে কামড় দিয়েছে? আমার কি শূন্য সূচক বা একটি সূচক হওয়া উচিত?


60
"অ্যারে সূচকগুলি কি 0 বা 1 এ শুরু করা উচিত? আমার 0.5% এর আপসটি যথাযথ বিবেচনা ছাড়াই প্রত্যাখ্যান করা হয়েছিল।" - স্ট্যান কেলি-Bootle
মশা

2
@ গ্যানাট এটি অফিসে আমি একা একা ভাল - কম্পিউটারের স্ক্রিনে ঘুরতে থাকা হাসির ফোঁটাগুলি সাধারণত উত্পাদনশীলতার ভাল সূচক হয় না!
kdbanman

4
চ্যানেলগুলি কি সেটে তাদের অবস্থান দ্বারা চিহ্নিত করতে হবে? পরিবর্তে আপনি তাদের অন্য কোনও দ্বারা সনাক্ত করতে পারবেন না (যেমন ফ্রিকোয়েন্সি যদি সেগুলি টিভি চ্যানেলগুলি হত)?
svick

@ এসভিক, এটি একটি দুর্দান্ত বিষয়। আমি পরে বিভিন্ন শনাক্তকারী দ্বারা চ্যানেল অ্যাক্সেসের অনুমতি দিতে পারি, তবে ক্লায়েন্টদের প্রাথমিক লিঙ্গটি সত্যই মনে হয় একটি তালিকাভুক্ত চ্যানেল নম্বর।
kdbanman

দ্রুত পঠন থেকে মনে হয় দক্ষতার বিষয়টি হিসাবে সূচকগুলি ব্যবহার করার দরকার নেই, তাই আপনি অ্যারে সম্পর্কে চিন্তাভাবনা না করে চ্যানেল আইডি এবং চ্যানেলগুলিকে সরাসরি লিঙ্ক করতে কোনও ধরণের মানচিত্র ব্যবহার করতে পারেন। আমি মনে করি রব এটাই পাচ্ছে, এবং যদি আপনি সূচকগুলি ব্যবহার না করে তবে তার সমাধানের সাথে আমিও সম্মত।
ম্যাথু 18

উত্তর:


24

দেখে মনে হচ্ছে আপনি Channelএটির পরিচয়দাতাকে একটি এর মধ্যে এর অবস্থানের সাথে মিলিয়ে দিচ্ছেন ChannelSet। আপনার কোড / মন্তব্যগুলি এই মুহুর্তে কীভাবে দেখবে তার নীচে আমার দৃশ্যায়ন রয়েছে:

public sealed class ChannelSet
{
    private Channel[] channels;
    /// <summary>Retrieves the specified channel</summary>
    /// <param name="channelId">The id of the channel to return</param>
    Channel GetChannel(int channelId)
    {
        return channels[channelId-1];
    }
}

এটির মতো মনে হয় আপনি সিদ্ধান্ত নিয়েছেন যেহেতু Channelএকটি এর মধ্যে এমন একটি ChannelSetসংখ্যা দ্বারা চিহ্নিত করা হয় যা একটি উপরের এবং নীচের দিকে আবদ্ধ থাকে সেগুলি অবশ্যই সূচক এবং তাই এটি সি #, 0 ভিত্তিক। যদি প্রতিটি চ্যানেলকে রেফারেন্সের প্রাকৃতিক উপায়টি 1 এবং X এর মধ্যে একটি সংখ্যার দ্বারা হয় তবে তাদের 1 এবং X এর মধ্যে একটি সংখ্যা দ্বারা উল্লেখ করুন try এটিকে সূচকে পরিণত করার চেষ্টা করবেন না এবং জোর করবেন না।

আপনি যদি 0 টি ভিত্তিক সূচী দ্বারা সত্যিই সেগুলি অ্যাক্সেসের কোনও উপায় সরবরাহ করতে চান (তাহলে এটি আপনার শেষ ব্যবহারকারী, বা কোডটি গ্রাহক বিকাশকারীদের কী সুবিধা দেয়?) তারপরে একটি সূচক কার্যকর করুন :

public sealed class ChannelSet
{
    private Channel[] channels;
    /// <summary>Retrieves the specified channel</summary>
    /// <param name="channelId">The id of the channel to return</param>
    public Channel GetChannel(int channelId)
    {
        return channels[channelId-1];
    }

    /// <summary>Return the channel at the specified index</summary>
    public Channel this[int index]
    {
        return channels[index];
    }
}

2
এটি একটি সম্পূর্ণ এবং সংক্ষিপ্ত উত্তর। আমি অন্যান্য উত্তর থেকে প্রাপ্ত এটাই ঠিক একই পদ্ধতির।
kdbanman

7
পথচারীরা, আমি এই উত্তরটি গ্রহণ করেছি, তবে এই থ্রেডটি ভাল উত্তর দিয়ে পূর্ণ, তাই পরে পড়ুন।
kdbanman

খুব সুন্দর, @ রব "আমি সূচকগুলি কীভাবে ব্যবহার করতে হয় তা জানি" " - নিও
জেসন পি স্যালিঞ্জার

35

ইনডেক্স 1 সহ ইউআই দেখান, কোডে সূচক 0 ব্যবহার করুন।

এটি বলেছিল, আমি এই জাতীয় অডিও ডিভাইসের সাথে কাজ করেছি এবং চ্যানেলগুলির জন্য সূচি 1 ব্যবহার করেছি এবং হতাশা এড়াতে সহায়তার জন্য কোডটি কখনই "সূচী" বা সূচীকার ব্যবহার না করে ডিজাইন করেছি। কিছু প্রোগ্রামার এখনও অভিযোগ করেছে, তাই আমরা এটি পরিবর্তন করেছি। তারপরে অন্যান্য প্রোগ্রামাররা অভিযোগ করেছিলেন।

কেবল একটি বাছাই করুন এবং এটি দিয়ে আটকে দিন। দরজাটি বাইরে সফ্টওয়্যার পাওয়ার মহা প্রকল্পে আরও বড় সমস্যাগুলি সমাধান করার আছে।


12
এর ব্যতিক্রম: আপনি যদি 1-ভিত্তিক ভাষা ব্যবহার করেন। আপনার কোডটি আপনার বাকী কোড এবং আপনার ভাষার সাথে সামঞ্জস্যপূর্ণ হওয়া উচিত, সুতরাং সি # তে 0-ভিত্তিক, ভিবিএ (!) বা লুয়ায় 1 ভিত্তিক। আপনার ইউআই হ'ল উচিত যা মানুষের আশা (যা প্রায় সর্বদা 1-ভিত্তিক)।
ব্যবহারকারী 253751

1
@ ইমিবিস - ভাল কথা, আমি এটা ভাবিনি।
টেলাস্টিন

3
বেসিকের পুরনো দিনের প্রোগ্রামিংয়ের কথা আমি মাঝে মাঝে মিস করি যা হ'ল "বিকল্প ভিত্তি" ...
ব্রায়ান নোব্লাচ

1
@ ব্লুরাজা-ড্যানিপ্লুঘুফুট: যদিও আমি সবসময় Option Baseনির্বোধ মনে করতাম , এমন বৈশিষ্ট্যটি আমি পছন্দ করেছি কিছু ভাষাগুলি অ্যারেগুলিকে স্বতন্ত্রভাবে নিম্ন সীমা নির্দিষ্ট করার অনুমতি দেয়। যদি কারও কাছে বছর বছর ধরে ডেটার অ্যারে থাকে, উদাহরণস্বরূপ, অ্যারের মাত্রিক মাত্রা অর্জনের বাইরে [firstYear..lastYear]সর্বদা উপাদান অ্যাক্সেস করার চেয়ে ভাল হতে পারে [thisYear-firstYear]
সুপারক্যাট

1
@ ব্লুরাজা-ড্যানিপ্লুঘুফুট একজন মানুষের বাগ অন্য ব্যক্তির বৈশিষ্ট্য ...
ব্রায়ান নোব্লাচ

21

ব্যবহার উভয়.

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

প্রোগ্রামটির যে অংশটি ইউআই এর সাথে ডেটার সাথে মিলিত হয়, সেই দৃশ্যের ব্যবহারকারীর মানসিক মডেল এবং 'লাইব্রেরি' এর মধ্যে ডেটা সঠিকভাবে অনুবাদ করার জন্য যত্ন নেওয়া উচিত যা আসল কাজ করে।

কেন এই ভাল?

  • কোডটি ক্লিনার হতে পারে, সূচী অনুবাদ করার কোনও হ্যাক নেই। এটি প্রোগ্রামারদের অপ্রাকৃত নিয়মাবলী অনুসরণ এবং মনে রাখার প্রত্যাশা না করে সহায়তা করে।
  • ব্যবহারকারীরা তাদের প্রত্যাশা অনুযায়ী সূচক ব্যবহার করবেন। আপনি তাদের বিরক্ত করতে চান না।

12

আপনি দুটি পৃথক কোণ থেকে সংগ্রহ দেখতে পারেন।

(1) এটি প্রথম স্থানে একটি অ্যারে বা তালিকার মতো একটি নিয়মিত অনুক্রমিক সংগ্রহ । সূচকটি 0হ'ল স্পষ্টতই সঠিক সমাধান, সম্মেলনের পরে। আপনি সূচকগুলিতে পর্যাপ্ত এন্ট্রি এবং মানচিত্রের চ্যানেল নম্বর বরাদ্দ করেন যা তুচ্ছ (কেবল বিয়োগফল 1)।

(২) আপনার সংগ্রহটি চ্যানেল শনাক্তকারী এবং চ্যানেল তথ্য অবজেক্টের মধ্যে ম্যাপিং হয়। এটি কেবল ঘটে যায় যে চ্যানেল শনাক্তকারীরা পূর্ণসংখ্যার ক্রমিক সীমা; আগামীকাল এটি কিছু হতে পারে [1, 2, 3, 3a, 4, 4.1, 6, 8, 13]। আপনি এই আদেশযুক্ত সেটটি ম্যাপিং কী হিসাবে ব্যবহার করেন।

একটি পদ্ধতির চয়ন করুন, এটি নথিভুক্ত করুন এবং এতে আঁকুন। নমনীয়তার দৃষ্টিকোণ থেকে, আমি (২) এর সাথে যাব, কারণ চ্যানেল নম্বরের উপস্থাপনা (কমপক্ষে প্রদর্শিত নাম) ভবিষ্যতে তুলনামূলকভাবে পরিবর্তনের সম্ভাবনা রয়েছে।


আমি আপনার উত্তরের অংশ 2 সত্যিই প্রশংসা করি। আমি মনে করি আমি এর মতো কিছু গ্রহণ করব। সূচক অ্যাকসেসর ( channels[int]) হতে হবে শূন্য সূচীবদ্ধ পূর্ণসংখ্যার, এবং পেতে accessors GetChannelByFrequency, GetChannelByName, GetChannelByNumberনমনীয় হতে হবে।
kdbanman

1
দ্বিতীয় পদ্ধতির অবশ্যই সেরা। আমার স্থানীয় সম্প্রচারকরা 1 টি থেকে শুরু করে 201 অবধি এলসিএন সহ 32 টি চ্যানেল সরবরাহ করে This এর জন্য একটি বিচ্ছিন্ন অ্যারে (84% খালি) প্রয়োজন হবে। এটি ধারণাগতভাবে টেলিফোন নম্বর অনুসারে একটি অ্যারেতে লোক সংগ্রহ সংরক্ষণ করার মতো।
কেলি টমাস

3
তদ্ব্যতীত, এত ছোট যে কোনও সংগ্রহ এটি কোনও ইউআই ড্রপডাউন দ্বারা প্রতিনিধিত্বযোগ্য তা ডেটা স্ট্রাকচার হিসাবে কোনও অ্যারের নির্দিষ্ট কার্য সম্পাদন বৈশিষ্ট্যগুলি থেকে উপকৃত হওয়ার সম্ভাবনা খুব কম। সুতরাং ব্যবহারকারী "চ্যানেল 1" নামক জিনিসটিকে কোডে খুব "1" বলা যেতে পারে এবং একটি Dictionaryবা ব্যবহার করতে পারে SortedDictionary
স্টিভ জেসোপ

1
অন্তত বিস্ময়ের নীতিটি বোঝায় যে operator [] (int index)এটি 0-ভিত্তিক হওয়া উচিত, যদিও operator [] (IOrdered index)না। (আনুমানিক সিনট্যাক্সের জন্য দুঃখিত, আমার সি # খুব মরিচা।)
9000

2
@ কেডব্যানম্যান: ব্যক্তিগতভাবে, আমি যুক্তি দিয়ে বলব যে আপনি যখনই []কোনও ভাষাতে অতিরিক্ত বোঝা চাপিয়ে চলেছেন যা স্বেচ্ছাসেবক কী দ্বারা অনুসন্ধানের জন্য এই ওভারলোডটি ব্যবহার করে, তখন প্রোগ্রামারদের অবশ্যই চাবিগুলি শুরু করা উচিত নয় 0এবং এটি সুস্পষ্ট হয় এবং এই অভ্যাসটিকে তীব্র করে তোলা উচিত। এগুলি শুরু হতে পারে 0, বা 1, বা 1000, বা স্ট্রিংটি "Channel1", []ইচ্ছামত কীগুলির সাহায্যে অপারেটর ব্যবহারের পুরো পয়েন্ট । OTOH, যদি এটি সি হয় এবং কেউ যদি বলছিলেন "আমি কি 0আরম্ভ করার জন্য কোনও বিন্যাসকে অব্যবহৃত অবস্থায় রেখে দিতে পারি 1" তবে আমি "স্পষ্টতই, হ্যাঁ" বলব না, এটি একটি নিকটে কল হবে তবে আমি ঝুঁকে যাব "না"।
স্টিভ জেসোপ

3

প্রত্যেকে এবং তাদের কুকুর শূন্য ভিত্তিক সূচকগুলি ব্যবহার করে। আপনার অ্যাপ্লিকেশনের অভ্যন্তরে এক-ভিত্তিক সূচকগুলি ব্যবহার করা আপনাকে চিরকালের জন্য রক্ষণাবেক্ষণের সমস্যায় ফেলবে।

এখন আপনি কোন ইউজার ইন্টারফেসে যা প্রদর্শিত করেন তা পুরোপুরি আপনার এবং আপনার ক্লায়েন্টের উপর নির্ভর করে। চ্যানেল নম্বর হিসাবে i + 1 কেবল চ্যানেল # i এর সাথে প্রদর্শন করুন, যদি এটি আপনার ক্লায়েন্টকে খুশি করে।

আপনি যদি কোনও শ্রেণি উন্মোচন করেন তবে আপনি প্রোগ্রামারদের কাছে এটি উন্মোচন করুন। শূন্য-ভিত্তিক সূচক দ্বারা আপনি বিভ্রান্ত লোকেরা প্রোগ্রামার নয়, সুতরাং এখানে সংযোগ বিচ্ছিন্ন।

আপনি ইউআই এবং কোডের মধ্যে রূপান্তর সম্পর্কে উদ্বিগ্ন বলে মনে হচ্ছে। যদি তা আপনাকে চিন্তিত করে, একটি চ্যানেল নম্বরের ব্যবহারকারী ইন্টারফেসের উপস্থাপনা বহন করে একটি শ্রেণি তৈরি করুন। একটি কল 12 নম্বরটিকে UI উপস্থাপনা "চ্যানেল 13" তে পরিণত করবে এবং একটি কল "চ্যানেল 13" কে 12 নম্বরে পরিণত করবে আপনার গ্রাহকের মন পরিবর্তন করার ক্ষেত্রে আপনাকে যেভাবেই করা উচিত, তাই কোডের মাত্র দুটি লাইন রয়েছে পরিবর্তন করতে. এবং এটি কাজ করে যদি গ্রাহক রোমান সংখ্যার জন্য জিজ্ঞাসা করে, বা A থেকে Z তে চিঠি দেয়


1
আমি আপনার উত্তর যাচাই করতে পারছি না যেহেতু আমার কুকুর আমাকে কোন ধরণের সূচকগুলি ব্যবহার করবে তা বলবে না।
আরমানি

3

আপনি দুটি ধারণা মিশ্রন করছেন: সূচীকরণ এবং পরিচয়। এগুলি একই জিনিস নয় এবং তাদের বিভ্রান্ত করা উচিত নয়।

সূচকের উদ্দেশ্য কী? দ্রুত এলোমেলো অ্যাক্সেস। যদি পারফরম্যান্সটি কোনও সমস্যা না হয়ে থাকে এবং আপনার বিবরণটি তা না হয় তবে সূচী সংকলন ব্যবহার করা অপ্রয়োজনীয় এবং সম্ভবত দুর্ঘটনাজনক।

যদি আপনি (বা আপনার দল) সূচক বনাম পরিচয় দিয়ে বিভ্রান্ত হয়ে পড়ে থাকেন তবে আপনি সূচক না রেখেই সমস্যাটি সমাধান করতে পারেন। অভিধান বা একটি গণ্য হয় ব্যবহার করুন এবং মান অনুসারে চ্যানেলটি পান।

channels.First(c=> c.Number == identity).SomeProperty = newValue;
channels[identity].SomeProperty = newValue;

প্রথমটি আরও স্পষ্ট, দ্বিতীয়টি সংক্ষিপ্ত - এগুলি একই আইএলে অনুবাদ হতে পারে বা নাও পারে, তবে যেভাবেই আপনি ড্রপডাউনের জন্য এটি ব্যবহার করছেন, এটি যথেষ্ট দ্রুত হওয়া উচিত।


2

আপনি আপনার ChannelSetক্লাসের মাধ্যমে এমন একটি ইন্টারফেস প্রকাশ করছেন যা আপনার ব্যবহারকারীদের সাথে যোগাযোগ করার প্রত্যাশা করছেন। আমি তাদের পক্ষে যথাসম্ভব ব্যবহার করা প্রাকৃতিক করে তুলব। আপনি যদি আশা করেন যে আপনার ব্যবহারকারীরা 0 এর পরিবর্তে 1 থেকে গণনা শুরু করবেন, তবে এই শ্রেণিটি এবং এর ব্যবহারটিকে সেই প্রত্যাশাটিকে সামনে রেখে প্রকাশ করুন।


1
এতে সমস্যা আছে! আমার শেষ ব্যবহারকারীরা 1 থেকে আরম্ভ করার প্রত্যাশা করছেন, এবং আমার ডেভ ব্যবহারকারীরা (আমার অন্তর্ভুক্ত) 0 থেকে শুরু হওয়ার প্রত্যাশা করছেন
কেডব্যানম্যান

1
এবং তাই আমি তখন আপনার শেষ ব্যবহারকারীদের প্রয়োজন মেটাতে আপনার ক্লাসটি মানিয়ে নেওয়ার পরামর্শ দিচ্ছি।
বার্নার্ড

2

0-ভিত্তিক সূচকগুলি জনপ্রিয় ছিল এবং গুরুত্বপূর্ণ ব্যক্তিদের দ্বারা রক্ষা করা হয়েছিল, কারণ ঘোষণাপত্রটি বস্তুর আকার দেখায়।

আধুনিক কম্পিউটারগুলির সাথে, আপনার ব্যবহারকারীরা যে কম্পিউটারগুলি ব্যবহার করবেন সেগুলির সাথে কি বস্তুর আকারটি আদৌ গুরুত্বপূর্ণ?

যদি আপনার ল্যাঙ্গেজ (সি #) কোনও অ্যারের প্রথম এবং শেষ উপাদানটি ঘোষণার পরিষ্কার পদ্ধতিটিকে সমর্থন না করে তবে আপনি কেবলমাত্র একটি বড় অ্যারে ঘোষণা করতে পারেন এবং লজিকাল স্টার্ট এবং (বা ডায়নামিক ভেরিয়েবল) লজিকাল শুরু এবং শেষে সনাক্ত করতে পারেন অ্যারের সক্রিয় অঞ্চল।

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


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

@ ফাইরফক্স: শূন্য-ভিত্তিক সূচকের জন্য আমি যে বিমূর্ততা পছন্দ করি তা হ'ল সূচকগুলি বস্তুর মধ্যে অবস্থান চিহ্নিত করে; প্রথম বস্তুটি সূচকগুলি 0 এবং 1 এর মধ্যে থাকে, দ্বিতীয়টি 1 এবং 2 এর মধ্যে থাকে etc. ইত্যাদি প্রদত্ত x <= y <= z, রেঞ্জ [x, y] এবং [y, z] ধারাবাহিক হবে তবে ওভারল্যাপ নয়, এবং হয় বা উভয়ই কোনও বিশেষ কোণার প্রয়োজনের সাথে খালি থাকতে পারে। শূন্য-ভিত্তিক সূচক সহ "সূচকগুলি আইটেমগুলির মধ্যে বসুন" মডেল গ্রহণ করার সময়, ছয়টি আইটেমের একটি তালিকা 0 থেকে 6 অবধি বিস্তৃত হয়; এক-ভিত্তিক সূচকের সাথে এটি 1 থেকে 7 পর্যন্ত বসবে Note দ্রষ্টব্য যে এই বিমূর্তনটি "এক-ছাড়িয়ে" পয়েন্টারগুলির সাথে ভাল ফিট করে।
সুপারক্যাট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.