zoukankan      html  css  js  c++  java
  • 如何高效地抽离出两个数组中的相同元素

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

    当时我脑中想到的办法是把一个数组中的元素逐个地去另一个数组中查找,但是此办法效率不高,下面给出测试代码,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

  • 相关阅读:
    win10 uwp 弹起键盘不隐藏界面元素
    win10 uwp 存放网络图片到本地
    win10 uwp 存放网络图片到本地
    sublime Text 正则替换
    sublime Text 正则替换
    win10 uwp 绘图 Line 控件使用
    win10 uwp 绘图 Line 控件使用
    AJAX 是什么?
    什么是 PHP SimpleXML?
    PHP XML DOM:DOM 是什么?
  • 原文地址:https://www.cnblogs.com/chenhongyu/p/3477173.html
Copyright © 2011-2022 走看看