导航
  • 主页
  • .NET Framework
  • ASP
  • Web Services
  • .NET互联网桌面应用
  • VB
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • AppLauncher
  • 问答

谢谢。。各位大神。这种如何在内存中匹配

nitaiyoucala 2021-05-19 01:12:57
第一个txt数据
campaignId campaignName
1 湖北
2 江苏

第二个txt数据
adgroupId adgroupName
1 仙桃
2 武汉
3 苏州

第三个txt数据
campaignId adgroupId keyword
1 1 湖北哈哈哈
1 2 湖北xxxx
2 3 苏州2222


需求:不想导入sql中,想通过程序在内存中匹配 得到如下数据,代码怎么实现?
campaignId adgroupId keyword
湖北 仙桃 湖北哈哈哈
湖北 武汉 湖北xxxx
江苏 苏州 我是江苏的苏州2222
...全文
1478 点赞 收藏 14
写回复
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
低丶调 07-06

最后你是怎么写的?
直接建一个类(省id,省名称,市id,市名称),然后把前两个的数据都放到这个list里,最后用FirstOrDefault根据id取到model,model里面就包含省和市的名称,这样就完事了吧

这个list搞完后大概是这些数据
省id 省名称 市id 市名称
1 湖北 1 仙桃
1 湖北 2 武汉

然后循环里面
var model = 上面搞好的list.FirstOrDefault(a=>a.省id==省id && a.市id==市id);
然后从model里面去省名称和市名称

这个地方应该也可以直接用left join之类的来代替自己遍历,具体的话,就得边写边调试一下了

回复
luj_1768 05-24
现在挖矿最热,难度越来越大。不过,推荐的方法是:写好业务规则,然后用训练解决。
回复
找到hashtable
回复
yiyioo 05-21
广告行业的码农啊。哈哈哈哈哈。
回复
引用 9 楼 Null_Reference 的回复:
[quote=引用 6 楼 nitaiyoucala 的回复:][quote=引用 5 楼 Null_Reference 的回复:]

var txt1 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\1.txt");
            var txt2 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\2.txt");
            var txt3 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\3.txt");

            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("campaignId");
            dt.Columns.Add("campaignName");
            foreach (var item in txt1)
            {
                if (item != txt1.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt1 = new System.Data.DataTable();
            dt1.Columns.Add("adgroupId");
            dt1.Columns.Add("adgroupName");
            foreach (var item in txt2)
            {
                if (item != txt2.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt1.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt2 = new System.Data.DataTable();
            dt2.Columns.Add("campaignId");
            dt2.Columns.Add("adgroupId");
            dt2.Columns.Add("keyword");
            foreach (var item in txt3)
            {
                if (item != txt3.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt2.Rows.Add(tarr);
                }
            }

            var t1 = dt.AsEnumerable();
            var t2 = dt1.AsEnumerable();
            var t3 = dt2.AsEnumerable();

            var query1 =
                  from l1 in t1
                  from l2 in t2
                  from l3 in t3
                  where l1.Field<String>("campaignId") == l3.Field<String>("campaignId") && l2.Field<String>("adgroupId") == l3.Field<String>("adgroupId")
                  select new
                  {
                      adgroupName = l2.Field<String>("adgroupName"),
                      campaignName = l1.Field<String>("campaignName"),
                      keyword = l3.Field<String>("keyword"),

                  };

            DataTable dtNew = new DataTable();
            dtNew.Columns.Add("adgroupName");
            dtNew.Columns.Add("campaignName");
            dtNew.Columns.Add("keyword");
            foreach (var obj in query1)
            {
                dtNew.Rows.Add(obj.adgroupName, obj.campaignName, obj.keyword);
            }
这是啥问题? 谢谢 [/quote] 你不是用的NET或C#迈?为啥你的不等于符号和我们的不一样?[/quote] 命名空间引用了吗 using System;
回复
引用 6 楼 nitaiyoucala 的回复:
[quote=引用 5 楼 Null_Reference 的回复:]

var txt1 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\1.txt");
            var txt2 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\2.txt");
            var txt3 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\3.txt");

            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("campaignId");
            dt.Columns.Add("campaignName");
            foreach (var item in txt1)
            {
                if (item != txt1.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt1 = new System.Data.DataTable();
            dt1.Columns.Add("adgroupId");
            dt1.Columns.Add("adgroupName");
            foreach (var item in txt2)
            {
                if (item != txt2.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt1.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt2 = new System.Data.DataTable();
            dt2.Columns.Add("campaignId");
            dt2.Columns.Add("adgroupId");
            dt2.Columns.Add("keyword");
            foreach (var item in txt3)
            {
                if (item != txt3.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt2.Rows.Add(tarr);
                }
            }

            var t1 = dt.AsEnumerable();
            var t2 = dt1.AsEnumerable();
            var t3 = dt2.AsEnumerable();

            var query1 =
                  from l1 in t1
                  from l2 in t2
                  from l3 in t3
                  where l1.Field<String>("campaignId") == l3.Field<String>("campaignId") && l2.Field<String>("adgroupId") == l3.Field<String>("adgroupId")
                  select new
                  {
                      adgroupName = l2.Field<String>("adgroupName"),
                      campaignName = l1.Field<String>("campaignName"),
                      keyword = l3.Field<String>("keyword"),

                  };

            DataTable dtNew = new DataTable();
            dtNew.Columns.Add("adgroupName");
            dtNew.Columns.Add("campaignName");
            dtNew.Columns.Add("keyword");
            foreach (var obj in query1)
            {
                dtNew.Rows.Add(obj.adgroupName, obj.campaignName, obj.keyword);
            }
这是啥问题? 谢谢 [/quote] 你不是用的NET或C#迈?为啥你的不等于符号和我们的不一样?
回复
string txt1 = System.IO.File.ReadAllText("1.txt"); string txt2 = System.IO.File.ReadAllText("2.txt"); string txt3 = System.IO.File.ReadAllText("3.txt"); var txtarry3 = txt3.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); List<string> newStr = new List<string>() { string.Join(" ",txtarry3[0].Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) }; for (int i = 1; i < txtarry3.Count; i++) { var item = txtarry3[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); string s= txt1.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == item[0]).FirstOrDefault()?.Split(new string[] {" " },StringSplitOptions.RemoveEmptyEntries)?[1]??""; string ss = txt2.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == item[1]).FirstOrDefault()?.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)?[1]??""; newStr.Add(s+" "+ss+" "+item[2]); } string val = string.Join("\r\n", newStr); System.IO.File.WriteAllText("4.txt",val);
回复
hashtable,前两个读到hashtable里面,第三个根据key从hashtable里面取值替换就是了
回复
引用 5 楼 Null_Reference 的回复:

var txt1 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\1.txt");
            var txt2 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\2.txt");
            var txt3 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\3.txt");

            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("campaignId");
            dt.Columns.Add("campaignName");
            foreach (var item in txt1)
            {
                if (item != txt1.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt1 = new System.Data.DataTable();
            dt1.Columns.Add("adgroupId");
            dt1.Columns.Add("adgroupName");
            foreach (var item in txt2)
            {
                if (item != txt2.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt1.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt2 = new System.Data.DataTable();
            dt2.Columns.Add("campaignId");
            dt2.Columns.Add("adgroupId");
            dt2.Columns.Add("keyword");
            foreach (var item in txt3)
            {
                if (item != txt3.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt2.Rows.Add(tarr);
                }
            }

            var t1 = dt.AsEnumerable();
            var t2 = dt1.AsEnumerable();
            var t3 = dt2.AsEnumerable();

            var query1 =
                  from l1 in t1
                  from l2 in t2
                  from l3 in t3
                  where l1.Field<String>("campaignId") == l3.Field<String>("campaignId") && l2.Field<String>("adgroupId") == l3.Field<String>("adgroupId")
                  select new
                  {
                      adgroupName = l2.Field<String>("adgroupName"),
                      campaignName = l1.Field<String>("campaignName"),
                      keyword = l3.Field<String>("keyword"),

                  };

            DataTable dtNew = new DataTable();
            dtNew.Columns.Add("adgroupName");
            dtNew.Columns.Add("campaignName");
            dtNew.Columns.Add("keyword");
            foreach (var obj in query1)
            {
                dtNew.Rows.Add(obj.adgroupName, obj.campaignName, obj.keyword);
            }
这是啥问题? 谢谢
回复

var txt1 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\1.txt");
            var txt2 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\2.txt");
            var txt3 = System.IO.File.ReadAllLines(@"C:\Users\Yong\Desktop\3.txt");

            System.Data.DataTable dt = new System.Data.DataTable();
            dt.Columns.Add("campaignId");
            dt.Columns.Add("campaignName");
            foreach (var item in txt1)
            {
                if (item != txt1.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt1 = new System.Data.DataTable();
            dt1.Columns.Add("adgroupId");
            dt1.Columns.Add("adgroupName");
            foreach (var item in txt2)
            {
                if (item != txt2.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt1.Rows.Add(tarr);
                }
            }
            System.Data.DataTable dt2 = new System.Data.DataTable();
            dt2.Columns.Add("campaignId");
            dt2.Columns.Add("adgroupId");
            dt2.Columns.Add("keyword");
            foreach (var item in txt3)
            {
                if (item != txt3.First())
                {
                    var tarr = item.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                    dt2.Rows.Add(tarr);
                }
            }

            var t1 = dt.AsEnumerable();
            var t2 = dt1.AsEnumerable();
            var t3 = dt2.AsEnumerable();

            var query1 =
                  from l1 in t1
                  from l2 in t2
                  from l3 in t3
                  where l1.Field<String>("campaignId") == l3.Field<String>("campaignId") && l2.Field<String>("adgroupId") == l3.Field<String>("adgroupId")
                  select new
                  {
                      adgroupName = l2.Field<String>("adgroupName"),
                      campaignName = l1.Field<String>("campaignName"),
                      keyword = l3.Field<String>("keyword"),

                  };

            DataTable dtNew = new DataTable();
            dtNew.Columns.Add("adgroupName");
            dtNew.Columns.Add("campaignName");
            dtNew.Columns.Add("keyword");
            foreach (var obj in query1)
            {
                dtNew.Rows.Add(obj.adgroupName, obj.campaignName, obj.keyword);
            }
回复
俗称csv文件 当然对于我个人来说,我也不想介绍啥ado.net 读取csv到datatable,也不想介绍啥linq2csv 对于neter来说,其实是时候看看其他人到底在干啥了,首先我们说csv文件这玩意,目前在工作做使用的最多的是2类人 1.python的人,他们的给模型的训练前的预处理过程,大部分和csv文件有关 2.ETL行业的人,他们可能会从Hadoop上拉取分布的各种文本,然后进行mapreduce聚合数据 我们来看看python的人怎么玩 https://blog.csdn.net/yxdd1gbk/article/details/88667566 对他们用pandas ok,我们去nuget看看,或者直接搜索“C# 类似pandas的库” 我们至少可以看到3个被老外了大规模使用的库 1.微软自己的Microsoft.Data.Analysis https://devblogs.microsoft.com/dotnet/an-introduction-to-dataframe/ 2.Deedle http://bluemountaincapital.github.io/Deedle/index.html 3.Pandas.NET https://github.com/SciSharp/Pandas.NET
回复
引用 2 楼 死亡中的独行者 的回复:
string txt1 = System.IO.File.ReadAllText("1.txt"); string txt2 = System.IO.File.ReadAllText("2.txt"); string txt3 = System.IO.File.ReadAllText("3.txt"); var txtarry3 = txt3.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); List<string> newStr = new List<string>() { string.Join(" ",txtarry3[0].Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) }; for (int i = 1; i < txtarry3.Count; i++) { var item = txtarry3[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); string s= txt1.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == item[0]).FirstOrDefault().Split(new string[] {" " },StringSplitOptions.RemoveEmptyEntries)[1]; string ss = txt2.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == item[1]).FirstOrDefault().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[1]; newStr.Add(s+" "+ss+" "+item[2]); } string val = string.Join("\r\n", newStr); System.IO.File.WriteAllText("4.txt",val);
报错了
回复
string txt1 = System.IO.File.ReadAllText("1.txt"); string txt2 = System.IO.File.ReadAllText("2.txt"); string txt3 = System.IO.File.ReadAllText("3.txt"); var txtarry3 = txt3.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).ToList(); List<string> newStr = new List<string>() { string.Join(" ",txtarry3[0].Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries)) }; for (int i = 1; i < txtarry3.Count; i++) { var item = txtarry3[i].Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries); string s= txt1.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == item[0]).FirstOrDefault().Split(new string[] {" " },StringSplitOptions.RemoveEmptyEntries)[1]; string ss = txt2.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries).Where(p => p.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[0] == item[1]).FirstOrDefault().Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries)[1]; newStr.Add(s+" "+ss+" "+item[2]); } string val = string.Join("\r\n", newStr); System.IO.File.WriteAllText("4.txt",val);
回复
求助求助。。。
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告