データ構造API、Javascriptデータ構造に関連するAPIの簡潔な概観.

6136 ワード

データ構造の2ヶ月と私は完全に失われている、私はADHDを持って、これはこのものを学ぶために私の唯一の方法です.

とにかく🤭

🤗 I'm a straight up beginner and if I lie in this " article " fill free to correct me.


レeeエットゴオ🦸‍♂️
🦸 データ構造はすべてジョブの正しいツールを選択することです.あなたが順序の方法でデータを格納する必要がありますか、単にそれを格納し、すぐに取得できるようにする必要がありますか?あなたのユースケースにとって重要なことは、データ構造がどのくらい速く実行されるか、またはどのくらいのメモリが必要となるか?異なったデータ構造はすべて利点、欠点、およびユースケースを持ちます、そして、それは異なるデータ構造がある全体の理由です!

🤔Consider the Array in JavaScript. It’s a really great data structure for storing ordered data because you can retrieve elements by index number. If you want the first element of an array, all you need to do is fetch it with index 0: arrayName[0]. It also provides all sorts of helpful methods for manipulating elements, such as .push() , .pop() , .sort() , and more. However, if you want to find out if a particular element exists in an array, you may need to iterate through the entire array.

🦸 What if I asked you to keep track of a series of numbers as I gave them to you, and then asked at the end whether I’d given you a particular number, you could probably do that in your memory. But if I asked you to do that in a computer program, you’d have to make choices about how to store the data. Let’s look at two possibilities of how we’d build storeNumber() and doYouHaveThisNumber() functions. Given the following list of numbers:

1, 250, -42, 0.4, 17

How might you store these numbers if I gave you each at a time? You might use an array:


const listOfNumbers = [];
const storeNumber = num => listOfNumbers.push(num);
const doYouHaveThisNumber = num => listOfNumbers.includes(num);

In this program, storeNumber() adds a number to the array, and doYouHaveThisNumber() returns true if that number exists in the array, and false otherwise. Looks pretty good, but what if you had 10000000 numbers? doYouHaveThisNumber() might start getting pretty slow, since Array.prototype.includes() iterates through the entire array until it finds the input value.

Let’s try using another built-in data type in JavaScript, the Object. Since all we want to keep track of is whether we received a particular number, we can just store those numbers in an object, and set their values to true if we received them:


const receivedNumbers = {};
const storeNumber = num => receivedNumbers[num] = true;
const doYouHaveThisNumber = num => receivedNumbers[num] === true;

In this case, we’ll have the same result on the outside, but because retrieving a value from an object is much faster than iterating through an array, the overall result will be faster.

In both cases, the public API of the code, meaning the parts of the code that we want the end-user to interact with, remained the same: we had two functions, storeNumber() and doYouHaveThisNumber(). The underlying implementation, or the way the functionality was actually achieved, is what altered.


-

But wait a minute Wth is an API?

API is an acronym for application programming interface. An API allows end-users to access properties and methods of data structures easily and without needing to do the “behind the scenes” work.


たとえば、新しい要素を配列の末尾に追加したい場合は、配列全体をループしたり、要素数を数える必要がなくなります.代わりに、あなただけで呼び出すことができます.追加したい値を持つsh ().JavaScriptプログラマとして、実際には、実際の戦略、または基礎的な実装を知る必要はありません.
配列のAPIは、各要素の関数を呼び出すイテレータメソッドに対して、配列の先頭と末尾に要素を追加したり削除したりするのに便利な機能を提供します.しかし、数の配列で最も小さい数を見つけたいなら、その機能を実装しなければならないでしょう.

Creating Your Own APIs

As you build your own data structures, you will implement the functionality to create public APIs. As in the example of storeNumber() and doYouHaveThisNumber(), the same public #API can be implemented in different ways, so it’s important to think about the advantages and disadvantages of different implementations.


淋APIはエンドユーザーへのメッセージのようです.いくつかの言語には、公共の懸垂(どこからでも呼ぶことができる)または少しの個人的な懸垂(どちらのクラスからでも呼ぶことができる)のどちらかであるメソッドまたはフィールドを持つことができるクラスがあります.パブリックメソッドは、そのクラスのエンドユーザーが呼び出すことができるものです.JavaScriptは本当にこの概念をサポートしていないので、一般的であることを意図していないプロパティは、アンダースコアであることが多い.制限されたAPIでデータ構造を構築したい例を見てみましょう.
スタックは、スタックの“top”からデータを追加(プッシュ)したり削除(ポップ)することができるデータ構造です.このようにして、配列として配列を使用することができます.ただし、配列を先頭に要素を追加するか、インデックスによってランダムにアクセスすることもできます.
今、スタックデータ構造のすべてのinsとoutをカバーするつもりはありませんが、パブリックAPI対実装を示すために、クイックカスタムスタッククラスを構築しましょう.
class Stack {
  constructor() {
    this._array = [];
  }
}
スタックにおいて、配列自体はRank配列として格納されるので、意図しているスタックを使用する他の開発者に対するシグナルであり、直接アクセスする必要はありません.そこから、myArray[currentCount + 1].push()のメソッドを実装できます.
class Stack {
  constructor() {
    this._array = [];
  }

  push(newValue) {
    this._array.push(newValue);
  }

  pop() {
    return this._array.pop();
  }
}
今、我々は、.push().pop()に基礎データとの直接の相互作用を制限するスタックデータ構造を作成しました.開発者はまだ他の操作を行うために、基になる配列にアクセスできます.
const stack = new Stack();
stack._array.unshift('value');
しかし、それらはスタッククラスの意図した振る舞いを壊すでしょう.パブリックAPIの全体のポイントは、他のエンドユーザーに機能を提供することです.誰かがプログラムでスタッククラスを使用していたなら、私たちは根底にある実装を完全に変えることができました、そして、エンドユーザーAPIが同じままである限り、彼らのプログラムは機能し続けなければなりません.
あなた自身のクラスとデータ構造を構築するので、実装の間のこの区別(特にそれがこの仕事をするために内部的に必要とするもの)と外部APIらせん(このユーザーがどうそれと対話するべきですか?)との区別を保つことは重要です.