两个DataTable求和
两个DataTable求和DataTable1数据为
{
”测试1“,10,
"测试2",20,
"测试3",30,
"测试4",34
}
DataTable2数据为
{
”测试1“,10,
"测试2",20,
"测试3",30,
"测试4",40,
”测试5“,50
}
得出结果为
{
”测试1“,20,
"测试2",40,
"测试3":60,
"测试4":74,
"测试5",50
}
循环两个DataTable后,测试1到测试4的结果都出来了,如何得出测试5的数据?
根据length 大的循环,嘻嘻 一楼永远的神 你比较下DataTable中的元素个数,用大的元素个数来循环 本帖最后由 shabaobao 于 2021-11-29 18:44 编辑
不知道你需要什么编程语言实现,先用js给你实现一下吧,浏览器控制台可以直接看结果
function sum(...args) {
let
data = Object.assign({}, ...args),
keys = Object.keys(data);
keys.forEach(key => {
data = 0
args.forEach(item => {
if (!isNaN(item)) {
data += item
}
})
})
return data
}
var
a = {
"测试1": 10,
"测试2": 20,
"测试3": 30,
"测试4": 34
},
b = {
"测试1": 10,
"测试2": 20,
"测试3": 30,
"测试4": 40,
"测试5": 50
},
c = {
"测试6": 0
};
sum(a, b, c) 本帖最后由 shabaobao 于 2021-11-29 18:45 编辑
运行结果截图 shabaobao 发表于 2021-11-29 18:10
运行结果截图
我用c#写的,写到这里没有思路了
如果在if后加个语句继续添加就会有很多重复的数据
var li = new List<listParms>();
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j < dt.Rows.Count; j++)
{
if (dt2.Rows["jz"].ToString() == dt.Rows["jz"].ToString())
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) + Convert.ToInt32(dt.Rows["num"].ToString()) });
break;
}
}
} xiaolong23330 发表于 2021-11-29 17:53
你比较下DataTable中的元素个数,用大的元素个数来循环
是先循环大的,再循环小的啊,还是我没理解透 本帖最后由 cn005897 于 2021-11-29 21:16 编辑
cn005897 发表于 2021-11-29 20:40
我用c#写的,写到这里没有思路了
如果在if后加个语句继续添加就会有很多重复的数据
用了一个特别笨的方法,每次循环后移除dt,好像前提是两个dt的顺序相等才行
各位大佬再给点意见参考参考
ps:好像代码看不见了,手动发出来吧
var li = new List<listParms>();
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j <= dt.Rows.Count; j++)
{
if (dt2.Rows["jz"].ToString() == dt.Rows["jz"].ToString())
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) + Convert.ToInt32(dt.Rows["num"].ToString()) });
if (dt.Rows.Count != 1) { dt.Rows.RemoveAt(j); }
break;
}
else
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) });
dt.Rows.RemoveAt(j);
break;
}
}
}var li = new List<listParms>();
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j <= dt.Rows.Count; j++)
{
if (dt2.Rows["jz"].ToString() == dt.Rows["jz"].ToString())
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) + Convert.ToInt32(dt.Rows["num"].ToString()) });
if (dt.Rows.Count != 1) { dt.Rows.RemoveAt(j); }
break;
}
else
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) });
dt.Rows.RemoveAt(j);
break;
}
}
} 代码看不见了,手动一波
var li = new List<listParms>();
for (int i = 0; i < dt2.Rows.Count; i++)
{
for (int j = 0; j <= dt.Rows.Count; j++)
{
if (dt2.Rows["jz"].ToString() == dt.Rows["jz"].ToString())
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) + Convert.ToInt32(dt.Rows["num"].ToString()) });
if (dt.Rows.Count != 1) { dt.Rows.RemoveAt(j); }
break;
}
else
{
li.Add(new listParms { Name = dt2.Rows["jz"].ToString(), Count = Convert.ToInt32(dt2.Rows["num"].ToString()) });
dt.Rows.RemoveAt(j);
break;
}
}
}
页:
[1]
2