c# - C# 替代嵌套有序字典?
问题描述
我正在开发的程序有问题。该程序的基本本质是查看选举数据文件并通过嵌套对象组织它。例如,每个政治种族都是一个对象,每个政治种族对象都有一个候选人和县结果对象的列表,等等。
我当前的问题围绕前面提到的县结果对象展开。我应该遍历文件,并记录候选人的姓名和他们在每个县获得的票数。目前我正在使用嵌套的有序字典来实现这一点,但它看起来很笨重,而且我在访问它们时遇到了问题。到目前为止,这是我的代码(listOrdicRows 是读取到有序列表中的选举文本文件):
public CountyResults(List<OrderedDictionary> listOrdicRows, String raceCode)
{
foreach (OrderedDictionary row in listOrdicRows)
{
bool duplicate = false;
foreach (County indivCounty in CountyList)
{
if (indivCounty.countyName == row["county_name"].ToString() && raceCode == row["race_code"].ToString())
{
duplicate = true;
break;
}
}
if (!duplicate && raceCode == row["race_code"].ToString())
{
CountyList.Add(new County(row["county_code"].ToString(), row["county_name"].ToString(), row["precincts"].ToString(), row["precincts_reporting"].ToString()));
}
}
populateCountyDict(listOrdicRows);
}
public void populateCountyDict(List<OrderedDictionary> listOrdicRows) //Dynamically populates County Dictionary
{
foreach (County x in CountyList)
{
String CountyName = x.countyName;
List<OrderedDictionary> candidatesWithVotes = null;
foreach (OrderedDictionary row in listOrdicRows)
{
if (CountyName == row["county_name"].ToString())
{
OrderedDictionary tempDictionary = new OrderedDictionary();
tempDictionary.Add(row["candidate_name"], row["total_votes"]);
candidatesWithVotes.Add(tempDictionary);
}
}
countyDict.Add(CountyName, candidatesWithVotes);
}
}
任何帮助将不胜感激,因为我非常卡住。有人问文件是什么样子的,这里有几行
选举日期 | 派对代码 | 派对名称 | 比赛代码 | 办公描述 | 县代码 | 县名 | 法学 | 法理学 | 选区 | 区域报告 | CanNameLast | CanNameFirst | CanNameMiddle | 可以投票 ------------ | --------- | ---------- | -------- | ---------------------------------------- | ---------- | ---------- | --------- | --------- | --------- | ------------------ | ------------ | ------------ | ------------- | -------- 2020/08/18 | 代表 | 共和党 | 苏联 | 美国代表 | 电调 | 埃斯坎比亚 | 001 | | 0 | 0 | 盖茨 | 马特 | | 29272 2020/08/18 | 代表 | 共和党 | 苏联 | 美国代表 | 霍尔 | 福尔摩斯 | 001 | | 6 | 6 | 盖茨 | 马特 | | 2131 2020/08/18 | 代表 | 共和党 | 苏联 | 美国代表 | 冈 | 奥卡卢萨 | 001 | | 52 | 52 | 盖茨 | 马特 | | 25861
解决方案
Linq 可以使它变得简单易读。
我已经为几列创建了一个示例文件
接下来是代码
public class ElectionInfo
{
public string Race { get; set; }
public string County { get; set; }
public string FName { get; set; }
public int VoteCnt { get; set; }
}
static void Main(string[] args)
{
Dictionary<string, List<ElectionInfo>> dict1 = File.ReadAllLines(@"C:\x1\TextFile2.txt")
.Select(record => record.Split(','))
.Select(cell => new ElectionInfo() { Race = cell[0], County = cell[1], FName = cell[2], VoteCnt = int.Parse(cell[3]) })
.GroupBy(x => x.Race)
.ToDictionary(t => t.Key, t => t.ToList<ElectionInfo>())
;