c#用于存储来自csv文件的值的适当数据结构.具体案例
我正在编写一个程序,它只会读取包含以下信息的2个不同的.csv文件:
file 1 file2 AA,2.34 BA,6.45 AB,1.46 BB,5.45 AC,9.69 BC,6.21 AD,3.6 AC,7.56 第一列是字符串,第二列是double. 到目前为止,我没有困难阅读这些文件并将值放入List: firstFile = new List<KeyValuePair<string,double>>(); secondFile = new List<KeyValuePair<string,double>>(); 我正在尝试指导我的程序: >从第一个文件的第一行的第一列获取第一个值(在本例中为AA) 类似于下面的伪代码: for(var i=0;i<firstFile.Count;i++) { firstFile.Column[0].value[i].SearchMatchesInAnotherFile(secondFile.Column[0].values.All); if(MatchFound) { CompareCorrespondingDoubles(); if(true) { AddFirstValueToList(); } } } 而不是List我尝试使用Dictionary但是这个数据结构没有排序,也无法通过索引访问密钥. 我不是要求提供确切的代码,而是问题是:
解决方法
KeyValuePair实际上仅用于Dictionarys.我建议你创建自己的自定义类型:
public class MyRow { public string StringValue {get;set;} public double DoubleValue {get;set;} public override bool Equals(object o) { MyRow r = o as MyRow; if (ReferenceEquals(r,null)) return false; return r.StringValue == this.StringValue && r.DoubleValue == this.DoubleValue; } public override int GetHashCode() { unchecked { return StringValue.GetHashCode ^ r.DoubleValue.GetHashCode(); } } } 并将文件存储在此类型的列表中: List<MyRow> firstFile = ... List<MyRow> secondFile = ... 然后,您可以通过LINQ的 var result = firstFile.Intersect(secondFile).ToList(); 有必要重写Equals和GetHashCode,否则Intersect只会进行参考比较.或者你可以实现一个自己的IEqualityComparer< MyRow,MyRow>进行比较并将其传递给适当的 但是如果你能确保键(字符串值是唯一的),你也可以使用 Dictionary<string,double> firstFile = ... Dictionary<string,double> secondFile = ... 在这种情况下使用此LINQ语句: var result = new Dictionary<string,double>( firstFile.Select(x => new { First = x,Second = secondFile.FirstOrDefault(y => x.Key == y.Key) }) .Where(x => x.Second?.Value == x.First.Value)); 时间复杂度为O(m n),而上部解决方案为O(m * n)(m和n为两个文件的行数). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ios – Xcode分析错误,缺少lib?
- xml – 如何在Visual Studio 2013中创建自己的“resx”文件
- Oracle以及SQLServer的表和记录查询
- ruby-on-rails – ActiveAdmin – 如何从partials访问实例变
- ruby-on-rails – 动态生成一个`link_to`到控制器动作`edit
- ruby-on-rails – 乘客mod_passenger中的意外错误:无法连接
- 正则表达式的捕获组(Java)
- ruby – 从街道地址剥离街道号码
- react-native – 如何在React Native 0.57中使用MobX和装饰
- Newtonsoft.Json高级用法