7R903 发表于 2021-11-29 17:06

两个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的数据?

MartinLee 发表于 2021-11-29 17:14

根据length 大的循环,嘻嘻

打酱油的笨小孩 发表于 2021-11-29 17:21

一楼永远的神

xiaolong23330 发表于 2021-11-29 17:53

你比较下DataTable中的元素个数,用大的元素个数来循环

shabaobao 发表于 2021-11-29 18:08

本帖最后由 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:10

本帖最后由 shabaobao 于 2021-11-29 18:45 编辑

运行结果截图

7R903 发表于 2021-11-29 20:40

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;
                  }
                }
            }

7R903 发表于 2021-11-29 21:05

xiaolong23330 发表于 2021-11-29 17:53
你比较下DataTable中的元素个数,用大的元素个数来循环

是先循环大的,再循环小的啊,还是我没理解透

7R903 发表于 2021-11-29 21:14

本帖最后由 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;
                  }
                }
            }

7R903 发表于 2021-11-29 21:16

代码看不见了,手动一波
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
查看完整版本: 两个DataTable求和