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

任何帮助将不胜感激,因为我被困住了。有人问文件是什么样子,这是几行

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可以使其变得简单易读。

我已经创建了一个仅几列的示例文件

enter image description here

接下来是代码

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...