• 如何高效地抽离出两个数组中的相同元素


    近期在面试时候遇到这么一道题目:比较两个存在大量元素的数组,抽离出他们的相同项。

    当时我脑中想到的办法是把一个数组中的元素逐个地去另一个数组中查找,但是此办法效率不高,下面给出测试代码,arry1和arry2各有一万个元素:

    private function loopCompare():void
    {
    	var startTime:int = getTimer();
    	var commonValue:Array = [];
    	var currentValue:int;
    	var index:int;
    	for(var i:int=0; i<elementCount; i++)
    	{
    		currentValue = arry1[i];
    		index = arry2.indexOf(currentValue);
    		if( index != -1 )
    		{
    			commonValue.push(currentValue);
    		}
    	}
    	trace("common count:" + commonValue.length.toString());
    	trace("time cost:" + (getTimer() - startTime).toString() + "ms");
    }

     之后,通过Google之后我发现了另一种办法:字典查找法,给予了我满意的效率,下面给出测试代码:

    private function ObjectCompare():void
    {
    	var startTime:int = getTimer();
    	var commonValue:Array = [];
    	var obj:Object = {};
    	for each(var elem:int in arry1)
    	{
    		obj[elem] = true;
    	}
    	
    	for each(elem in arry2)
    	{
    		if( obj[elem] )
    		{
    			commonValue.push(elem);
    			delete obj[elem];
    		}
    	}
    	
    	trace("common count:" + commonValue.length.toString());
    	trace("time cost:" + (getTimer() - startTime).toString() + "ms");
    }

     这个故事告诉我们,在比较数据方面,关联数组的效率要远大于一般数组。经测试,比较一万个元素,使用一般数组需要耗时677ms,而关联数组仅耗时10ms

  • 相关阅读:
    ASP.NET MVC 5 安全性和创建用户角色
    使用ENTITY FRAMEWORK 6以正确的方式管理DBCONTEXT:深入指南
    C#读取二进制格式的shapefile
    ASP.NET MVC 应用程序初学者常见问题汇总
    ASP.NET MVC 应用程序中使用CKEditor 4 的步骤
    html5学习笔记2
    html5学习笔记
    c#接口定义与应用
    Django ORM 优化心得
    携程的那点事
  • 原文地址:https://www.cnblogs.com/keng333/p/3195373.html
Copyright © 2020-2023  润新知