<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>@blog.justoneplanet.info &#187; 配列</title>
	<atom:link href="http://blog.justoneplanet.info/category/computer-language/javascript/array-javascript-computer-language/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.justoneplanet.info</link>
	<description>日々勉強</description>
	<lastBuildDate>Wed, 08 Feb 2012 02:57:17 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaScriptで型付の配列を扱ってみる</title>
		<link>http://blog.justoneplanet.info/2010/12/05/javascript%e3%81%a7%e5%9e%8b%e4%bb%98%e3%81%ae%e9%85%8d%e5%88%97%e3%82%92%e6%89%b1%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/</link>
		<comments>http://blog.justoneplanet.info/2010/12/05/javascript%e3%81%a7%e5%9e%8b%e4%bb%98%e3%81%ae%e9%85%8d%e5%88%97%e3%82%92%e6%89%b1%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 05:33:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[配列]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=3351</guid>
		<description><![CDATA[JavaScriptにも型付の配列が登場したらしいので使ってみる。((o(^-^)o))ﾜｸﾜｸ ■通常の配列と型付の配列の比較 以下のコードで通常の配列と型付の配列の速度を比較した。ちなみにChromeのCanary  [...]]]></description>
			<content:encoded><![CDATA[<p>JavaScriptにも型付の配列が登場したらしいので使ってみる。((o(^-^)o))ﾜｸﾜｸ</p>
<h3>■通常の配列と型付の配列の比較</h3>
<p>以下のコードで通常の配列と型付の配列の速度を比較した。ちなみにChromeのCanary Buildを使用してテストしている。</p>
<pre class="brush: jscript;">
var ary1  = new Array(1000000);
var start = new Date();
for(var i = 0, n = ary1.length; i &lt; n; i++){
    ary1[i] = i % 256;
}
console.log(new Date() - start);// 110

var ary2  = new Uint8Array(1000000);
var start = new Date();
for(var i = 0, n = ary2.length; i &lt; n; i++){
    ary2[i] = i % 256;
}
console.log(new Date() - start);// 24
</pre>
<p>超速です！</p>
<blockquote><p>The UInt8Array type represents an array of 8-bit unsigned integers.</p></blockquote>
<p>Uint8Arrayというのは8ビットの符合なし要素の配列らしい！</p>
<h3>■符号ありの要素の配列</h3>
<p>ということは符号ありの要素の配列もあるはずだ。</p>
<pre class="brush: jscript;">
var ary3  = new Int8Array(1000000);
var start = new Date();
for(var i = 0, n = ary3.length; i &lt; n; i++){
    ary3[i] = -i % 256;
}
console.log(new Date() - start);// 26
</pre>
<p>符号ありの方が同じ処理をしても僅かながらに遅い気がした。必要に応じて選択すべし。</p>
<section class="kakomi">
<p>ちなみにやってはいけないが符合なしの配列にわざと負の値を入れるとおかしな事になる。</p>
<pre class="brush: jscript;">
var ary2  = new Uint8Array(1000000);
var start = new Date();
for(var i = 0, n = ary2.length; i &lt; n; i++){
    ary2[i] = -i % 256;
}
console.log(ary2);
//0, 255, 254, ...
</pre>
<p>y = 256 &#8211; (x % 256)って感じになる。</p>
</section>
<section class="kakomi">
<h4>参考</h4>
<ul>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint8Array">Uint8Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint16Array">Uint16Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Uint32Array">Uint32Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Int8Array">Int8Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Int16Array">Int16Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Int32Array">Int32Array</a>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Float32Array">Float32Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays/Float64Array">Float64Array</a></li>
<li><a href="https://developer.mozilla.org/en/JavaScript_typed_arrays">JavaScript typed arrays</a></li>
<li><a href="https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/doc/spec/TypedArray-spec.html">Typed Arrays</a></li>
</ul>
</section>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2010/12/05/javascript%e3%81%a7%e5%9e%8b%e4%bb%98%e3%81%ae%e9%85%8d%e5%88%97%e3%82%92%e6%89%b1%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScriptとPHPの配列の扱い</title>
		<link>http://blog.justoneplanet.info/2009/11/28/javascript%e3%81%a8php%e3%81%ae%e9%85%8d%e5%88%97%e3%81%ae%e6%89%b1%e3%81%84/</link>
		<comments>http://blog.justoneplanet.info/2009/11/28/javascript%e3%81%a8php%e3%81%ae%e9%85%8d%e5%88%97%e3%81%ae%e6%89%b1%e3%81%84/#comments</comments>
		<pubDate>Sat, 28 Nov 2009 04:01:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[配列]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=3296</guid>
		<description><![CDATA[そういえば配列における「参照渡し」と「値渡し」の挙動がJavaScriptとPHPで異なっていたので書き留めておくことにする(・∀・)!! ■JavaScript 以下のようにJavaScriptでは、関数に配列を渡すと [...]]]></description>
			<content:encoded><![CDATA[<p>そういえば配列における「参照渡し」と「値渡し」の挙動がJavaScriptとPHPで異なっていたので書き留めておくことにする(・∀・)!!</p>
<h3>■JavaScript</h3>
<p>以下のようにJavaScriptでは、関数に配列を渡すと参照渡しとなる。</p>
<pre class="brush: jscript;">
var ary = ['a', 'b', 'c'];
var sample = function(ary){
    ary.pop();
}
console.log(ary);// ['a', 'b', 'c']
alert('sample');
sample(ary);
console.log(ary);// ['a', 'b']
</pre>
<p>ちなみにalertはconsoleが上手く作動しなかったために使用した。</p>
<h3>■PHP</h3>
<p>以下のようにPHPでは、関数に配列を渡すと値渡しとなる。</p>
<pre class="brush: php;">
$ary = array('a', 'b', 'c');
function sample($ary){
    array_pop($ary);
}
var_dump($ary);
sample($ary);
var_dump($ary);
</pre>
<p>JavaScriptと同じ挙動をPHPで再現するには以下のように記述する必要がある。</p>
<pre class="brush: php;">
$ary = array('a', 'b', 'c');
function sample(&amp;$ary){
    array_pop($ary);
}
var_dump($ary);
sample($ary);
var_dump($ary);
</pre>
<p>リソースを節約するには参照渡しを明示したほうがイイね（　＾ω＾）<br />
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/11/28/javascript%e3%81%a8php%e3%81%ae%e9%85%8d%e5%88%97%e3%81%ae%e6%89%b1%e3%81%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Arrays as Stacks and Queues（スタック・待ち行列）</title>
		<link>http://blog.justoneplanet.info/2009/09/19/javascript-arrays-as-stacks-and-queues%ef%bc%88%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%83%bb%e5%be%85%e3%81%a1%e8%a1%8c%e5%88%97%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2009/09/19/javascript-arrays-as-stacks-and-queues%ef%bc%88%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%83%bb%e5%be%85%e3%81%a1%e8%a1%8c%e5%88%97%ef%bc%89/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 22:09:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[配列]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=1901</guid>
		<description><![CDATA[■スタック スタックとは 順列において、最初に挿入されたデータが最後に取り出される。最後に挿入したデータが最初に取り出されるデータ構造。LIFO（last in first out）と呼ばれる。 実際のコード 以下のよう [...]]]></description>
			<content:encoded><![CDATA[<h3>■スタック</h3>
<h4>スタックとは</h4>
<p>順列において、最初に挿入されたデータが最後に取り出される。最後に挿入したデータが最初に取り出されるデータ構造。LIFO（last in first out）と呼ばれる。</p>
<h4>実際のコード</h4>
<p>以下のようにpush()メソッドを使用すると、引数を配列の要素として追加する。また、pop()メソッドを使用すると、配列の最終要素を削除し戻り値として返します。</p>
<pre class="brush: jscript;">
var ary = [];
ary.push('John', 'Jack');
alert(ary);//John,Jack
var name = ary.pop();
alert(ary);//John
alert(name);//Jack
</pre>
<div class="kakomi">
<h4>応用</h4>
<p>Stackを固定長とする時、以下の様なコードが良いかもしれない。</p>
<pre class="brush: jscript;">
var undefined;
function Stack(n){
    this._ary = new Array();
    this._length = n;
}
Stack.prototype = {
    &quot;isEmpty&quot; : function(){
        if(this._ary.length === 0){
            return true;
        }
        else{
            return false;
        }
    },
    &quot;isFull&quot; : function(){
        if(this._ary.length === this._length){
            return true;
        }
        else{
            return false;
        }
    },
    &quot;push&quot; : function(elm){
        if(this.isFull()){
            throw new Error('Stack is full : Stack.push(' + elm + ')');
        }
        else{
            this._ary.push(elm);
        }
    },
    &quot;pop&quot; : function(){
        var obj;
        if(this.isEmpty()){
            throw new Error('Stack is empty : Stack.pop');
        }
        else{
            obj = this._ary.pop();
            return obj;
        }
    },
    &quot;size&quot; : function(){
        return this._ary.length;
    },
    &quot;length&quot; : function(){
        return this._length;
    },
    &quot;top&quot; : function(){
        if(this.isEmpty()){
            throw new Error('Stack.top');
        }
        else{
            return this._ary[this._ary.length - 1];
        }
    },
    &quot;toString&quot; : function(){
	    return '[' + this._ary.join + ']';
    }
}
var tmp = new Stack(3);
tmp.push(1);
tmp.push(2);
tmp.push(3);
//tmp.push(4);//full
alert('top : ' + tmp.top());//3
alert('size : ' + tmp.size());//3
alert(tmp.pop());//3
alert(tmp.pop());//2
alert(tmp.pop());//1
alert('size : ' + tmp.size());//0
//alert(tmp.pop());//empty
//tmp.sort();//error
</pre>
<p>当然ながら実装されていないメソッドは使えない。</p>
<p>コンストラクタはfunctionで、その他メンバはprototypeで書くのが綺麗な気がする。</p>
</div>
<h3>■キュー（待ち行列）</h3>
<h4>待ち行列とは</h4>
<p>データが順列に挿入された順序で、削除（処理）されていくようなデータ構造。FIFO（first in first out）と呼ばれる。</p>
<h4>実際のコード</h4>
<p>以下のように、shift()メソッドを使うと配列の最初の要素を削除できる。また、unshift()メソッドを使うと引数を要素として挿入することができる。</p>
<pre class="brush: jscript;">
var ary = ['John', 'Ken', 'Mike'];
name = ary.shift();
alert(ary);//Ken,Mike
alert(name);//John
ary.unshift('Nick', 'Emily');
alert(ary);//Nick,Emily,Ken,Mike
</pre>
<p>shiftとunshiftを使うとスタックと変わらない。従ってキューの実装には以下のようにshiftとpushを用いる。</p>
<div class="kakomi">
<h4>応用</h4>
<pre class="brush: jscript;">
var undefined;
function Queue(n){
    this._ary = new Array();
    this._length = n;
}
Queue.prototype = {
    &quot;isEmpty&quot; : function(){
        if(this._ary.length === 0){
            return true;
        }
        else{
            return false;
        }
    },
    &quot;isFull&quot; : function(){
        if(this._ary.length === this._length){
            return true;
        }
        else{
            return false;
        }
    },
    &quot;enqueue&quot; : function(elm){
        if(this.isFull()){
            throw new Error('Queue is full : Queue.enqueue(' + elm + ')');
        }
        else{
            this._ary.push(elm);
        }
    },
    &quot;dequeue&quot; : function(){
        if(this.isEmpty()){
            throw new Error('Queue is empty : Queue.dequeue');
        }
        else{
            return this._ary.shift();
        }
    },
    &quot;size&quot; : function(){
        return this._ary.length;
    },
    &quot;length&quot; : function(){
        return this._length;
    },
    &quot;top&quot; : function(){
        if(this.isEmpty()){
            return new Error();
        }
        else{
            return this._ary[this._ary.length - 1];
        }
    },
    &quot;toString&quot; : function(){
	    return '[' + this._ary.join + ']';
    }
}
var tmp = new Queue(3);
tmp.enqueue(3);
tmp.enqueue(2);
tmp.enqueue(1);
//tmp.enqueue(0);//full
alert('top : ' + tmp.top());//3
alert('size : ' + tmp.size());//3
alert(tmp.dequeue());//3
alert(tmp.dequeue());//2
alert(tmp.dequeue());//1
alert('size : ' + tmp.size());//0
//alert(tmp.dequeue());//empty
</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2009/09/19/javascript-arrays-as-stacks-and-queues%ef%bc%88%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%83%bb%e5%be%85%e3%81%a1%e8%a1%8c%e5%88%97%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Array Basic（配列の基本）</title>
		<link>http://blog.justoneplanet.info/2008/09/19/javascript-array-basic%ef%bc%88%e9%85%8d%e5%88%97%e3%81%ae%e5%9f%ba%e6%9c%ac%ef%bc%89/</link>
		<comments>http://blog.justoneplanet.info/2008/09/19/javascript-array-basic%ef%bc%88%e9%85%8d%e5%88%97%e3%81%ae%e5%9f%ba%e6%9c%ac%ef%bc%89/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 20:45:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[配列]]></category>

		<guid isPermaLink="false">http://blog.justoneplanet.info/?p=1894</guid>
		<description><![CDATA[配列とは値を順序づけしたもので、個々の値を要素、各要素に割り当てる番号をインデックスと呼ぶ。但し、内部的にJavaScriptにおける配列とはオブジェクトを拡張したものである。 var tmpAry = new Arra [...]]]></description>
			<content:encoded><![CDATA[<p>配列とは値を順序づけしたもので、個々の値を要素、各要素に割り当てる番号をインデックスと呼ぶ。但し、内部的にJavaScriptにおける配列とはオブジェクトを拡張したものである。</p>
<pre class="brush: jscript;">
var tmpAry = new Array();
alert(typeof tmpAry);//object
</pre>
<h3>■配列の生成</h3>
<h4>配列リテラルを使用</h4>
<pre class="brush: jscript;">
var ary = ['John', 'Jack', 'Nick'];
</pre>
<h4>Arrayコンストラクタを使用</h4>
<pre class="brush: jscript;">
var ary = new Array('John', 'Jack', 'Nick');
</pre>
<p>但し、以下のように1個の数字を引数に指定した場合は、引数で指定した個数の未定義値の値の要素を持つ配列が生成される。</p>
<pre class="brush: jscript;">
var ary = new Array(5);
</pre>
<h3>■要素へのアクセス</h3>
<pre class="brush: jscript;">
var ary = ['John', 'Jack', 'Nick'];
ary[3] = 'Mike';
ary['3'] = 'Emily';
alert(ary);//John,Jack,Nick,Emily
</pre>
<h3>■要素の追加</h3>
<p>以下のようにして要素を追加することができる。インデックスは連続した値である必要はなく、メモリ上に使用していないインデックスが確保される事もない。</p>
<pre class="brush: jscript;">
var ary = ['John', 'Jack', 'Nick'];
ary[101] = 'Pochi';
for(var i = 0; i&lt; ary.length; i++){
    alert(ary[i]);
}
//102 times alerts
</pre>
<p>但し、lengthは最後のインデックス+1が格納され、上述のようなコードではループが最後のインデックスまで1ずつ実行される。</p>
<h3>■要素の削除</h3>
<p>以下のようにdelete演算子を使うこともできるが、undefinedが入り要素自体は削除されない。</p>
<pre class="brush: jscript;">
var undefined;//for browsers not implementing the type 'undefined'
var ary = ['John', 'Jack', 'Nick'];
delete ary[1];
alert(ary);//John,,Nick
alert(ary.length);//3
for(var i = 0; i &lt; ary.length; i++){
    if(typeof ary[i] === undefined){
        alert('undefined');
    }
    else{
        alert(ary[i]);
    }
}
/*
John,undefined,Nick
*/
</pre>
<h3>■lengthプロパティ</h3>
<p>以下のように配列の長さより小さな値を代入し配列を切り詰めることができる。</p>
<pre class="brush: jscript;">
var ary = ['John', 'Jack', 'Nick'];
ary.length = 2;
alert(ary);//John,Jack
</pre>
<p>以下のように配列の長さより大きな値を代入し配列を拡張することができる。</p>
<pre class="brush: jscript;">
var ary = ['John', 'Jack', 'Nick'];
ary.length = 4;
alert(ary);//John,Jack,Nick,
</pre>
<p>代入することが出来るのは基本的には数値のみである。</p>
<pre class="brush: jscript;">
var ary = ['John', 'Jack', 'Nick'];
ary.length = {};
//syntax error
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.justoneplanet.info/2008/09/19/javascript-array-basic%ef%bc%88%e9%85%8d%e5%88%97%e3%81%ae%e5%9f%ba%e6%9c%ac%ef%bc%89/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

