问题描述
我正在开发的程序遇到问题。该程序的基本本质是浏览选举数据文件并通过嵌套对象进行组织。例如,每个单独的“政治种族”都是一个对象,每个“政治种族”对象都有一个“候选人”和“县结果”对象的列表,等等。
我当前的问题与前面提到的“县结果”对象有关。我应该遍历文件,并记录候选人的姓名和他们为每个县获得的票数。目前,我正在使用嵌套的有序词典来实现此目的,但是似乎很笨拙,并且在访问它们时遇到了问题。到目前为止,这是我的代码(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);
}
}
任何帮助将不胜感激,因为我被困住了。有人问文件是什么样子,这是几行
ElectionDate | PartyCode | PartyName | RaceCode | OfficeDesc | CountyCode | CountyName | Juris1num | Juris2num | Precincts | PrecinctsReporting | CanNameLast | CanNameFirst | CanNameMiddle | CanVotes ------------ | --------- | ---------- | -------- | ---------------------------- | ---------- | ---------- | --------- | --------- | --------- | ------------------ | ----------- | ------------ | ------------- | -------- 2020/08/18 | REP | Republican | USR | United States Representative | ESC | Escambia | 001 | | 0 | 0 | Gaetz | Matt | | 29272 2020/08/18 | REP | Republican | USR | United States Representative | HOL | Holmes | 001 | | 6 | 6 | Gaetz | Matt | | 2131 2020/08/18 | REP | Republican | USR | United States Representative | OKA | Okaloosa | 001 | | 52 | 52 | Gaetz | Matt | | 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>())
;