gpt4 book ai didi

c# 用于存储来自 csv 文件的值的适当数据结构。具体案例

转载 作者:太空狗 更新时间:2023-10-29 20:15:45 25 4
gpt4 key购买 nike

我正在编写一个程序,它将简单地读取包含以下信息的 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

第一列是string,第二列是double

到目前为止,我可以毫无困难地读取这些文件并将值放入列表中:

firstFile = new List<KeyValuePair<string, double>>();
secondFile = new List<KeyValuePair<string, double>>();

我正在尝试指导我的程序:

  • 从第一个文件的第一行的第一列中获取第一个值(在本例中为 AA)
  • 然后查看第二个文件的整个第一列是否存在匹配项。
  • 如果找到字符串匹配,比较它们对应的第二个值(在本例中为 double),如果在本例中找到匹配,则将整行添加到单独的 List

类似于下面的伪代码:

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

我尝试使用 Dictionary 而不是 List 但此数据结构未排序,无法通过索引访问键。

不是要求提供确切的代码,而是问题是:

What would you suggest to use as an appropriate data structure for this program so that I can investigate myself further?

最佳答案

KeyValuePair实际上只用于 Dictionary秒。我建议创建您自己的自定义类型:

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 的 Intersect 确定交集(两个列表中出现的所有元素)方法:

var result = firstFile.Intersect(secondFile).ToList();

有必要重写EqualsGetHashCode , 因为否则 Intersect只会做一个引用比较。或者你可以实现自己的 IEqualityComparer<MyRow, MyRow>进行比较并将其传递给适当的 Intersect 也重载。


但是如果你能保证键(字符串值是唯一的),你也可以使用一个

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 是两个文件的行数)。

关于c# 用于存储来自 csv 文件的值的适当数据结构。具体案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50002808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com