百分求解2个数组的差异比较的实现思路。

MMX1027 2008-01-31 11:38:03


对比2个数组的差异
数组A和B,要求对比其中的差异,把比较结果显示出来
数组A{{"0001","A1"}
,{"0002","B1"}
,{"0003","A2"}
};

数组B{{"0002","B1"}
,{"0003","B1"}
,{"0004","A2"}
};

比较结果(列表形式)
A B 对比结果
-------------------------------------------------
0001,A1 完全不同
0002,B1 0002,B1 相同
0003,A2 0003,B1 有点不同
0004,A2 完全不同


比较结果类似BeyondCompare软件的匹配及差异的方式。

讨论下实现的思路.数据量2个数组各为5000条左右,性能方面也应考虑在内。语言不限。
大侠们来指导指导啊。百分感谢!

...全文
134 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yousite1 2008-02-02
  • 打赏
  • 举报
回复
跟著showbo趁分
MMX1027 2008-02-02
  • 打赏
  • 举报
回复
cloudgamer 用了数组的 shift()函数。随着比较数组会越来越小。性能应该不错。
MMX1027 2008-02-02
  • 打赏
  • 举报
回复
按 showbo 的思路,基本搞定了。感谢大家的帮助。
tantaiyizu 2008-01-31
  • 打赏
  • 举报
回复
你的根据是什么?
xiaojing7 2008-01-31
  • 打赏
  • 举报
回复
友情up
cloudgamer 2008-01-31
  • 打赏
  • 举报
回复
var arr1 = [1,2,4,9,5]
var arr2 = [2,7,0,5,6]

var a1 = arr1.sort(), a2 = arr2.sort();
(function a(){

if(a1.length == 0){
for(o2 in a2){
document.write("X___"+a2[o2]+"___不一样<br/>");
}
return;
}else if(a2.length == 0){
for(o1 in a1){
document.write(a1[o1]+"___X___不一样<br/>");
}
return;
}

if(a1[0] == a2[0]){
document.write(a1[0]+"___"+a2[0]+"___一样<br/>");
a1.shift();
a2.shift();
}else if(a1[0] < a2[0]){
document.write(a1[0]+"___X___不一样<br/>");
a1.shift()
}else{
document.write("X___"+a2[0]+"___不一样<br/>");
a2.shift();
}

a();
})();


也算一个思路吧
Go 旅城通票 2008-01-31
  • 打赏
  • 举报
回复
using System;
using System.Collections;
namespace TableCompare
{
/// <summary>
/// DictionaryBase字典类
/// </summary>
public class ClassOject : DictionaryBase
{
/// <summary>
/// 添加字典
/// </summary>
/// <param name="Key">键名称</param>
/// <param name="Value">键值</param>
public void Add(object Key, object Value)
{
Dictionary.Add(Key,Value);
}
/// <summary>
/// 删除字典
/// </summary>
/// <param name="Key">键名称</param>
public void Remove(object Key)
{
Dictionary.Remove(Key);
}
/// <summary>
/// 是否已经添加过字典
/// </summary>
/// <param name="Key">键名称</param>
/// <returns>是否添加过</returns>
public bool Contains(object Key)
{
return Dictionary.Contains(Key);
}
/// <summary>
/// 获取值
/// </summary>
/// <param name="Key">键名称</param>
/// <returns></returns>
public object this[object Key]
{
get { return Dictionary[Key]; }
set { Dictionary[Key] = value; }
}
}
public class test
{
/// <summary>
/// 结果
/// </summary>
enum Result
{
完全不同,
相同,
有点不同
}
[STAThread]
public static void Main(string[]Args)
{
ClassOject tbA = new ClassOject();
ClassOject tbB = new ClassOject();
tbA.Add("0001", "A1");
tbA.Add("0002", "B1");
tbA.Add("0003", "A2");
tbB.Add("0002", "B1");
tbB.Add("0003", "B1");
tbB.Add("0004", "A2");
Console.WriteLine("A".PadRight(20, ' ') + "B".PadRight(20, ' ') + "比较结果".PadRight(20, ' '));
Console.WriteLine("_".PadRight(60, '_'));
Result result;
foreach (DictionaryEntry de in tbA)
{
Console.Write((de.Key + "," + de.Value).PadRight(20, ' '));
if (tbB.Contains(de.Key))
{
if (tbB[de.Key] == de.Value)
{
Console.Write((de.Key + "," + de.Value).PadRight(20, ' '));
result = Result.相同;
tbB[de.Key] = "-1" + de.Value;//加个-1标志,表示比较过了
}
else
{
Console.Write((de.Key + "," + tbB[de.Key]).PadRight(20, ' '));
result = Result.有点不同;
tbB[de.Key] = "-1" + de.Value;//加个-1标志,表示比较过了
}
}
else
{
Console.Write(" ".PadRight(20));
result = Result.完全不同;
}
Console.WriteLine(result.ToString().PadRight(20, ' '));
//Console.WriteLine();
}
result = Result.完全不同;
//下面输出B中在A中完全不同的
foreach (DictionaryEntry de in tbB)
{
if (!de.Value.ToString().StartsWith("-1"))
{
Console.Write(" ".PadRight(20));
Console.Write((de.Key + "," + de.Value).PadRight(20, ' '));
Console.WriteLine(result.ToString().PadRight(20, ' '));
}
}
}
}
}
ydlchina 2008-01-31
  • 打赏
  • 举报
回复
up
MMX1027 2008-01-31
  • 打赏
  • 举报
回复
两个数组的结构是完全一样的。[N][2]
按行比较,第一个元素做为Key,
A[0,0]=B[0,0]且A[0,1]=B[0,1]则认为A第0行与第0行"相同"
A[0,0]=B[0,0]且A[0,1]<>B[0,1]则认为A第0行与第0行"有点不同"
A[0,0]在B数组[N,0]中不存在的,则认为"完全不同"

KEY在A,B数组中相对唯一,即在A中不存在相同的KEY。B同理。

87,920

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧