配列の比較

by atsumo
テストなのでソースは相当汚いです。
♥0 | Line 117 | Modified 2009-06-24 17:35:35 | MIT License
play

ActionScript3 source code

/**
 * Copyright atsumo ( http://wonderfl.net/user/atsumo )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/3Co4
 */

/*テストなのでソースは相当汚いです。*/

package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.TextField;
    public class FlashTest extends Sprite {
        
        private var _txtField:TextField = new TextField();
        private var _strA:Array = new Array("a","s","d","f","g");
        
        public function FlashTest() { 
            init();
            _txtField.width = stage.stageWidth;
            _txtField.height = stage.stageHeight / 2;
            _txtField.selectable = false;
            addChild(_txtField);
            
            var sp:Sprite = new Sprite();
            sp.graphics.beginFill(0x000000);
            sp.graphics.drawRect(0,0,100,20);
            sp.graphics.endFill();
            sp.y = _txtField.height+10;
            var txt:TextField = new TextField();
            txt.text = "reset";
            txt.textColor = 0xFFFFFF;
            txt.selectable = false;
            txt.mouseEnabled = false;
            //txt.x = sp.width/2 - txt.width/2;
            sp.addChild(txt);
            addChild(sp);
            sp.buttonMode = true; 
            sp.addEventListener(MouseEvent.CLICK , onClickHandler);
        }
        
        private function onClickHandler(e:MouseEvent):void
        {
        	_txtField.text = "";
        	init();
        }
        
        private function init():void
        {
        	
        	var array:Array = new Array();
        	var compareTarget:Array = new Array();
        	var random:int = int(Math.random()*4)+1;
            for(var i:int = 0; i < random; i++)
            {
            	var test:Test = new Test(int(Math.random()*10) , String(_strA[Math.ceil(Math.random()*_strA.length)]));
            	array.push(test);
            }
            
            compareTarget = shuffle(array);
            
            if(random > 2)
            {
            	array.shift();
            	_txtField.appendText("array.shift();\n");
            }
            
            log( array );
            _txtField.appendText("\n");
            log( compareTarget );
            _txtField.appendText("\n\n");
            _txtField.appendText("result : "+ match(array , compareTarget) +"\n\n");
            _txtField.appendText("sort\n");
            array.sortOn(["num" , "str"],[Array.DESCENDING|Array.NUMERIC],null);
            compareTarget.sortOn(["num" , "str"],[Array.DESCENDING|Array.NUMERIC],null);
            log( array );
            _txtField.appendText("\n");
            log( compareTarget );
            _txtField.appendText("\n\n");
            _txtField.appendText("result : "+ match(array , compareTarget) +"\n\n");
            
        }
        
        private function log( array:Array ):void{
        	
        	for(var i:int = 0; i < array.length; i++)
            {
            	if( i != 0 )
            		_txtField.appendText(", ");
            	_txtField.appendText(array[i].num + " " + array[i].str);
            }
            
        }
        
        private  function shuffle( array:Array ):Array
        {
            var c:Array = array.concat();
            var n:int, i:int = c.length - 1, t:*;
            for( ; i; --i ){
                n = Math.random() * i >> 0;
                t = c[i];
                c[i] = c[n];
                c[n] = t;
            }
            return c;
        }
        
        private function match( array:Array , compareTarget:Array ):Boolean
        {
        	var al:int = array.length;
        	var cl:int = compareTarget.length;
        	
        	if(al != cl)
        		return false;
        	
        	var cheker:Boolean;
        	for(var i:int=0; i < al; i++)
        	{
        		if(array[i] == compareTarget[i])
        		{
        			cheker = true;
        		}
        		else
        		{
        			cheker = false;
        			break;
        			_txtField.appendText("\nlog");
        		}
        			
        	} 
        	
        	return cheker;
        }
        
    }
}

class Test
{
	public var num:int;
	public var str:String;
	
	public function Test(num:int,str:String)
	{
		this.num = num;
		this.str = str;
	}
}