স্কালায় আমি কখন ভেক্টর বেছে নেব?


200

দেখে মনে হচ্ছে Vectorএটি স্কালা সংগ্রহের পার্টিতে দেরি হয়ে গেছে এবং সমস্ত প্রভাবশালী ব্লগ পোস্ট ইতিমধ্যে ছেড়ে গেছে।

জাভাতে ArrayListডিফল্ট সংগ্রহ - আমি ব্যবহার করতে পারি LinkedListতবে কেবল যখন আমি একটি অ্যালগরিদমের মাধ্যমে চিন্তা করি এবং অনুকূলিত করার জন্য যথেষ্ট যত্ন করি। স্কালায় আমি কি Vectorআমার ডিফল্ট হিসাবে ব্যবহার করা উচিত Seq, বা Listআসলে আরও উপযুক্ত হলে কখন কাজ করার চেষ্টা করব ?


1
আমার অনুমান আমি এখানে যা বোঝাতে চাইছি তা হল জাভাতে লেখার জন্য List<String> l = new ArrayList<String>()স্কালা ব্লগ তৈরি করতাম আপনি কি বিশ্বাস করবেন যে প্রত্যেকে সংগ্রহের ধার্মিকতা অর্জনের জন্য তালিকাটি ব্যবহার করে - তবে ভেক্টর কি সাধারণ-উদ্দেশ্য যথেষ্ট যে আমাদের এটি তালিকার জায়গায় ব্যবহার করা উচিত?
ডানকান ম্যাকগ্রিগোর

9
@ ডাবিলসকি: আমি ভাবছিলাম যে আপনি এর দ্বারা কী বোঝাতে চেয়েছেন? আমি REPL এ Listটাইপ Seq()করার সময় একটি পাই ।
মিসিংফ্যাক্টর

1
হুঁ, ঠিক আছে, এটি ডক্সে তাই বলে। সম্ভবত এটি কেবল সত্য IndexedSeq
দেবিলস্কি

1
ডিফল্ট কংক্রিট ধরণের সম্পর্কিত মন্তব্যটি Seqতিন বছরের বেশি পুরানো। Scala 2.11.4 (এবং তার আগে), ডিফল্ট কংক্রিট ধরনের হিসাবে Seqহয় List
মার্ক ক্যানলাস

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

উত্তর:


280

একটি সাধারণ নিয়ম হিসাবে, ডিফল্ট ব্যবহার Vector। যতো তাড়াতাড়ি সম্ভব Listজন্য প্রায় বড় বেশী তুচ্ছ সিকোয়েন্স আকারের জন্য সবকিছু এবং আরো মেমরি সাশ্রয়ী। অন্যান্য সংগ্রহের তুলনায় ভেক্টরের আপেক্ষিক পারফরম্যান্সের এই ডকুমেন্টেশনটি দেখুন । সাথে যেতে কিছুটা ডাউনসাইড রয়েছে Vector। বিশেষ করে:

  • মাথার আপডেটগুলি ধীরে ধীরে ধীরে ধীরে List(যদিও আপনি যতটা ভাবেন তেমন নয়)

স্কেলা ২.১০ এর আগে আরেকটি নেতিবাচক দিকটি ছিল যে প্যাটার্ন মেলানো সমর্থনটি আরও ভাল Listতবে এটি সাধারণকরণ +:এবং :+এক্সট্র্যাক্টরগুলির সাহায্যে 2.10 এ সংশোধন করা হয়েছিল ।

এই প্রশ্নটির কাছে যাওয়ার আরও একটি বিমূর্ত এবং বীজগণিতিক উপায়: আপনার ধারণাগতভাবে কী ধরণের ক্রম রয়েছে? এছাড়াও, আপনি এটির সাথে ধারণাগতভাবে কী করছেন? যদি আমি কোনও ফাংশন দেখতে পাই যা কোনওটি ফিরে আসে তবে Option[A]আমি জানি যে ফাংশনের ডোমেনে কিছু ছিদ্র রয়েছে (এবং এটি আংশিক)। আমরা সংগ্রহগুলিতে এই একই যুক্তি প্রয়োগ করতে পারি।

আমার যদি টাইপের ক্রম থাকে তবে List[A]আমি কার্যকরভাবে দুটি জিনিস বলছি। প্রথমত, আমার অ্যালগরিদম (এবং ডেটা) পুরোপুরি স্ট্যাক-কাঠামোগত। দ্বিতীয়ত, আমি জোর দিয়ে বলছি যে এই সংগ্রহটি নিয়ে আমি কেবল যা করতে যাচ্ছি তা পূর্ণ O এই দুটি সত্যিই একসাথে যেতে। বিপরীতে, যদি আমার কাছে কিছু টাইপ থাকে Vector[A]তবে কেবলমাত্র আমি দৃ am়ভাবে বলছি যে আমার ডেটাতে একটি সুসংজ্ঞাযুক্ত অর্ডার এবং একটি সীমাবদ্ধ দৈর্ঘ্য রয়েছে। সুতরাং, দাবিগুলি দুর্বল Vectorএবং এটি তার বৃহত্তর নমনীয়তার দিকে পরিচালিত করে।


2
২.১০ কিছু সময়ের জন্য বাইরে চলে গেছে, তালিকার প্যাটার্নটি মেলানো এখনও ভেক্টরের চেয়ে ভাল?
টিম গৌটিয়ার

3
তালিকার প্যাটার্ন মেলানো আর ভাল নয়। আসলে, এটি সম্পূর্ণ বিপরীত। উদাহরণস্বরূপ, মাথা এবং লেজ পেতে একজন করতে পারে case head +: tailবা করতে পারে case tail :+ head। খালি বিরুদ্ধে ম্যাচ করতে, আপনি আরও কিছু করতে পারেন case Seq()। আপনার যা কিছু প্রয়োজন তা List
এপিআইতে রয়েছে

Listএককভাবে সংযুক্ত তালিকার সাথে প্রয়োগ করা হয়। Vectorজাভা এর মত কিছু বাস্তবায়িত হয় ArrayList
জোশিয়ার যোদার

6
@ জোসিয়াহা যোদার এটি অ্যারেলিস্টের মতো কিছুই প্রয়োগ করা হয়নি। অ্যারেলিস্ট একটি অ্যারে জড়িয়ে দেয় যা এটি গতিশীলরূপে পুনরায় আকার দেয়। ভেক্টর একটি ট্রাই , যেখানে কীগুলি মানগুলির সূচক হয়।
জন কোলান্ডুইনি

1
আমি ক্ষমা প্রার্থনা করছি. আমি একটি ওয়েব-উত্স যাচ্ছিলাম যা বিবরণ সম্পর্কে অস্পষ্ট ছিল। আমার কি আমার আগের বক্তব্যটি সংশোধন করা উচিত? নাকি সেই খারাপ রূপ?
জোশিয়াহ যোদার

93

ওয়েল, একটি Listঅবিশ্বাস্যভাবে দ্রুত হতে পারে আলগোরিদিম সঙ্গে একমাত্র প্রয়োগ করা যেতে পারে ::, headএবং tail। আমি খুব সাম্প্রতিককালে এর একটি অবজেক্ট পাঠ পেয়েছি, যখন আমি জাভা'র পরিবর্তে splitএকটি এর Listপরিবর্তে একটি জেনারেশন তৈরি করেছিলাম Arrayএবং অন্য কিছু দিয়ে এটি হারাতে পারি না।

তবে, Listএকটি মৌলিক সমস্যা আছে: এটি সমান্তরাল অ্যালগরিদমের সাথে কাজ করে না। আমি Listএকটি দক্ষ পদ্ধতিতে একটিকে একাধিক বিভাগে বিভক্ত করতে বা এটিকে সামনে যুক্ত করতে পারি না ।

অন্যান্য ধরণের সংগ্রহ রয়েছে যা সমান্তরালতা আরও ভালভাবে পরিচালনা করতে পারে - এবং সেগুলির Vectorমধ্যে একটি। Vectorএছাড়াও দুর্দান্ত লোকালয় রয়েছে - যা Listনেই - যা কিছু অ্যালগরিদমের জন্য একটি বাস্তব প্লাস হতে পারে।

সুতরাং, বিবেচিত সমস্ত বিষয় Vectorহ'ল সর্বোত্তম পছন্দ হ'ল যদি না আপনি নির্দিষ্ট বিবেচনা না করে যা অন্য সংগ্রহগুলির মধ্যে একটিকে পছন্দনীয় করে তোলে - উদাহরণস্বরূপ, আপনি বেছে নিতে Streamপারেন যদি আপনি অলস মূল্যায়ন এবং ক্যাশে চান ( Iteratorদ্রুত তবে ক্যাশে নেই), বা Listযদি আমি উল্লিখিত অপারেশনগুলির সাথে অ্যালগরিদমটি স্বাভাবিকভাবেই প্রয়োগ করা হয়।

উপায় দ্বারা, এটি ব্যবহার করার জন্য বাঞ্ছনীয় Seqবা IndexedSeqযদি না আপনি API- এর একটি নির্দিষ্ট স্থানের (যেমন চান Listএর ::), অথবা এমনকি GenSeqবা GenIndexedSeqযদি আপনার এলগরিদম সমান্তরাল চালানো যেতে পারে।


3
উত্তর করার জন্য ধন্যবাদ. "দুর্দান্ত লোকালয়" বলতে কী বোঝ?
এনগোক দাও

10
@ngocdaothanh এর অর্থ হ'ল ডেটা মেমরির সাথে একত্রে একত্রিত করা হয়েছে, আপনার যখন প্রয়োজন হবে তখন ডেটা ক্যাশে থাকবে এমন সম্ভাবনা উন্নতি করে।
ড্যানিয়েল সি সোব্রাল

1
@ ব্যবহারকারীর 247077 হ্যাঁ, তালিকাগুলি আমি উল্লেখ করা বিবরণ দিয়ে কর্মক্ষেত্রে ভেক্টরকে পরাজিত করতে পারে। এবং ভেক্টরগুলির সমস্ত ক্রিয়াকলাপ হে (1) মোড়কযুক্ত নয়। প্রকৃতপক্ষে, অপরিবর্তনীয় ডেটা স্ট্রাকচারগুলিতে (যা হ'ল), বিকল্প সন্নিবেশ / মুছে ফেলা উভয় প্রান্তে মোটেও ক্ষুদ্রতর হবে না। সেক্ষেত্রে ক্যাশে অকেজো কারণ আপনি সর্বদা ভেক্টরটি অনুলিপি করছেন।
ড্যানিয়েল সি

1
@ user247077 সম্ভবত আপনি জানেন না যে Vectorস্কালায় একটি অপরিবর্তনীয় ডেটা কাঠামো?
ড্যানিয়েল সি

1
@ ইউজার ২7070777777 It's এর চেয়ে আরও জটিল, কিছুটা অভ্যন্তরীণ পরিবর্তনযোগ্য জিনিসপত্রকে আরও সস্তা করার জন্য অন্তর্ভুক্ত, তবে আপনি যখন এটি স্ট্যাক হিসাবে ব্যবহার করেন, যা অপরিবর্তনীয় তালিকাটি সর্বোত্তম দৃশ্যাবলী, আপনি এখনও একটি লিঙ্কযুক্ত তালিকার একই স্মৃতি বৈশিষ্ট্যগুলি সমাপ্ত করেন তবে অনেক বড় মেমরি বরাদ্দ প্রোফাইল সহ।
ড্যানিয়েল সি

29

এখানে কিছু বিবৃতি বিভ্রান্ত বা এমনকি ভুল, বিশেষত ধারণা যে অপরিবর্তনীয় Sc স্ক্যালায় ভেক্টর অ্যারেলিস্টের মতো কিছু anything তালিকা এবং ভেক্টর উভয়ই অপরিবর্তনীয়, অবিচল (যেমন "পরিবর্তিত অনুলিপি পেতে সস্তা") ডেটা স্ট্রাকচার। পরিবর্তনীয় ডেটা স্ট্রাকচারের জন্য এগুলি হতে পারে এমন কোনও যুক্তিসঙ্গত ডিফল্ট পছন্দ নেই তবে এটি আপনার অ্যালগরিদম কী করছে তার উপর নির্ভর করে। তালিকাটি এককভাবে সংযুক্ত তালিকা, অন্যদিকে ভেক্টর একটি বেস -32 পূর্ণসংখ্যার ট্রাই, অর্থাৎ এটি 32 ডিগ্রি নোড সহ এক ধরণের অনুসন্ধান গাছ this এন))। এটি প্রিপেন্ড, সংযোজন, হালনাগাদ, এলোমেলো অ্যাক্সেস, মাথা / লেজে ক্ষয়ের জন্য কাজ করে। ক্রমিক ক্রমে আইটরিশন লিনিয়ার। অন্যদিকে তালিকাগুলি কেবল লিনিয়ার পুনরাবৃত্তি এবং ধ্রুবক সময় প্রিপেন্ড, মাথার / লেজে ক্ষয় omp

এটি দেখে মনে হতে পারে যেন ভেক্টর প্রায় সব ক্ষেত্রেই তালিকার একটি ভাল প্রতিস্থাপন ছিল, তবে প্রায়শই কার্যক্ষম প্রোগ্রামে ক্রমবিকরণ, ক্ষয় এবং পুনরাবৃত্তি গুরুত্বপূর্ণ ক্রিয়াকলাপ এবং এই ক্রিয়াকলাপগুলির স্থিরতাগুলি ভেক্টরের কারণে অনেক বেশি (বেশি) বেশি থাকে are এর আরও জটিল কাঠামোতে। আমি কয়েকটি পরিমাপ করেছি, সুতরাং পুনরাবৃত্তির তালিকার প্রায় দ্বিগুণ দ্রুত, প্রিপেন্ড তালিকাগুলিতে প্রায় 100 গুণ দ্রুত, মাথার / পুচ্ছের ক্ষয় তালিকাগুলিতে প্রায় 10 গুণ দ্রুত এবং ট্র্যাক্সেসেবল থেকে জেনারেশন ভেক্টরগুলির জন্য প্রায় 2 গুণ দ্রুত হয়। (এটি সম্ভবত, কারণ ভেক্টর যখন একবার একে একে উপাদানগুলি সংশোধন বা সংযোজন করার পরিবর্তে কোনও বিল্ডার ব্যবহার করে তৈরি করেন তখন একবারে 32 টি উপাদানগুলির অ্যারে বরাদ্দ করতে পারে)।

সুতরাং আমাদের কোন ডাটা স্ট্রাকচার ব্যবহার করা উচিত? মূলত, এখানে চারটি সাধারণ ঘটনা রয়েছে:

  • আমাদের কেবল মানচিত্র, ফিল্টার, ভাঁজ ইত্যাদির মতো ক্রিয়াকলাপগুলি রূপান্তর করতে হবে: মূলত এটি কোনও বিষয় নয়, আমাদের আমাদের আলগোরিদমটি জেনারিকভাবে প্রোগ্রাম করা উচিত এবং সমান্তরাল ক্রমগুলি গ্রহণ করে এমনকি উপকৃত হতে পারে। অনুক্রমিক ক্রিয়াকলাপের জন্য তালিকা সম্ভবত কিছুটা দ্রুত। আপনি যদি অনুকূলিত হন তবে আপনার এটি বেঞ্চমার্ক করা উচিত।
  • আমাদের প্রচুর এলোমেলো অ্যাক্সেস এবং বিভিন্ন আপডেট দরকার, তাই আমাদের ভেক্টর ব্যবহার করা উচিত, তালিকাটি নিষিদ্ধভাবে ধীর হবে।
  • আমরা ক্লাসিকাল ক্রিয়ামূলক উপায়ে তালিকাগুলিতে পরিচালনা করি, পুনরাবৃত্তিশীল পচন দ্বারা প্রিপেন্ডিং এবং পুনরাবৃত্তি দ্বারা সেগুলি তৈরি করে: ব্যবহারের তালিকা, ভেক্টর 10-100 বা তার বেশি ফ্যাক্টর দ্বারা ধীর হবে।
  • আমাদের একটি পারফরম্যান্স সমালোচনামূলক অ্যালগরিদম রয়েছে যা মূলত অপরিহার্য এবং একটি তালিকায় প্রচুর এলোমেলো অ্যাক্সেস করে, যেমন স্থানের মতো দ্রুত-বাছাই করুন: স্থানীয়ভাবে একটি আবশ্যক ডেটা স্ট্রাকচার ব্যবহার করুন, যেমন অ্যারেবফার, এবং আপনার ডেটাটি এখান থেকে অনুলিপি করুন।

24

অপরিবর্তনীয় সংগ্রহগুলির জন্য, আপনি যদি সিকোয়েন্স চান তবে আপনার মূল সিদ্ধান্তটি এমন কোনও IndexedSeqবা এ ব্যবহার করবেন কিনা LinearSeq, যা কার্য সম্পাদনের জন্য বিভিন্ন গ্যারান্টি দেয়। একটি ইনডেক্সডেস্ক উপাদানগুলির দ্রুত র্যান্ডম অ্যাক্সেস এবং একটি দ্রুত দৈর্ঘ্যের ক্রিয়াকলাপ সরবরাহ করে। একটি লিনিয়ারসেক কেবল প্রথম উপাদানটির মাধ্যমে দ্রুত অ্যাক্সেস সরবরাহ করে headতবে এর একটি দ্রুত tailঅপারেশনও রয়েছে। (সেক ডকুমেন্টেশন থেকে নেওয়া।)

একটি জন্য IndexedSeqআপনি সাধারণত একটি পছন্দ করবে VectorRangeগুলি এবং WrappedStringগুলি ইন্ডেক্সডেক্সও হয় e

একটির জন্য LinearSeqআপনি সাধারণত একটি Listবা এর অলস সমতুল্য পছন্দ করবেন Stream। অন্যান্য উদাহরণ Queueগুলি এবং Stackএস।

তাই জাভা ভাষায় বলতে গেলে, ArrayListScala এর একইভাবে ব্যবহার করা Vector, এবং LinkedListএকইভাবে Scala এর List। তবে স্কালায় আমি ভেক্টরের তুলনায় প্রায়শই তালিকাটি ব্যবহার করতে চাইব, কারণ স্কালার ক্রমগুলির ট্র্যাভার্সাল যেমন ম্যাপিং, ভাঁজ, পুনরাবৃত্তি ইত্যাদি অন্তর্ভুক্ত ফাংশনগুলির জন্য আরও ভাল সমর্থন রয়েছে আপনি এই ফাংশনটি তালিকাকে তালিকা হিসাবে সামঞ্জস্য করতে ব্যবহার করবেন সম্পূর্ণ, এলোমেলোভাবে পৃথক উপাদান অ্যাক্সেস না করে।


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

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

2
আমি নিশ্চিত প্রশংসনীয় Vector's পুনরাবৃত্তির হয় দ্রুত, কিন্তু এটি বেঞ্চমার্ক কাউকে চাহিদা নিশ্চিত হতে।
ড্যানিয়েল স্পিউক

আমার মনে হয় ()২) Vectorগ্রুপে র‌্যামের সাথে শারীরিকভাবে উপাদানগুলি একত্রে বিদ্যমান, যা সিপিইউ ক্যাশে আরও পুরোপুরি ফিট করে ... তাই কম ক্যাশে মিস আছে
সমৃদ্ধ

2

যে পরিস্থিতিতে প্রচুর এলোমেলো অ্যাক্সেস এবং এলোমেলো রূপান্তর জড়িত, একটি Vector(বা - ডক্স হিসাবে - ক Seq) একটি ভাল আপস বলে মনে হচ্ছে। পারফরম্যান্স বৈশিষ্ট্যগুলিও এটাই বোঝায় ।

এছাড়াও, Vectorক্লাসটি বেশি ডেটা ডুপ্লিকেশন ছাড়াই বিতরণ করা পরিবেশে দুর্দান্ত খেলবে বলে মনে হয় কারণ সম্পূর্ণ অবজেক্টের জন্য অনুলিপি করার দরকার নেই। (দেখুন: http://akka.io/docs/akka/1.1.3/scala/stm.html# ব্যক্তিগত / ডেটাস্ট্রাকচার )


1
এতটুকু শিখতে হবে ... ভেক্টর ডিফল্ট সিকের অর্থ কী? আমি যদি সেক লিখি (1, 2, 3) আমি তালিকা পেয়েছি [ইনট] ভেক্টর নয় [ইনট]।
ডানকান ম্যাকগ্রিগোর

2
আপনার যদি এলোমেলো অ্যাক্সেস থাকে তবে একটি ব্যবহার করুন IndexedSeq। যা তাও Vectorকিন্তু এটি অন্য বিষয়।
ড্যানিয়েল সি সোব্রাল

@ ডানকানমিসিগ্রিগোর: ভেক্টর ডিফল্ট IndexedSeqযা প্রয়োগ করে SeqSeq(1, 2, 3)এটি LinearSeqব্যবহার করে বাস্তবায়ন করা হয় List
প্যাথিক্রিট

0

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

যদি আপনার অপরিবর্তনীয় ডেটা স্ট্রাকচারের প্রয়োজন না হয় তবে অ্যারেবফারের সাথে লেগে থাকুন কারণ এটি অ্যারেলিস্টের সমতুল্য স্কাল।


আমি অবিচ্ছিন্ন, অবিরাম সংগ্রহের রাজ্যে আটকে আছি। আমার বক্তব্যটি হ'ল, এমনকি যদি আমার এলোমেলো অ্যাক্সেসের প্রয়োজন না হয় তবে ভেক্টর কার্যকরভাবে তালিকাটি প্রতিস্থাপন করেছে?
ডানকান ম্যাকগ্রিগোর

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

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