我应该在C#中使用什么数据结构?清单清单?锯齿状阵列?

时间:2013-09-26 16:57:16

标签: c# data-structures

假设我在卫生署工作,并编制了食物中毒顾客的投诉记录。我还有一个我所在城市的餐馆列表,这些餐馆被分配了一个5位数字。对于每个投诉,我都知道以下信息:

  • 餐厅的5位数身份证件
  • 食物中毒受害人姓名/地址/年龄
  • 投诉日期

我想将投诉与餐馆匹配,以便列表或数组或数据结构中的第一个元素是5位数ID。任何特定餐厅的其余数据结构将包含食物中毒受害者的姓名/地址/年龄,以及投诉日期。

现在记住,一些餐馆会得到0个投诉而其他餐馆可能会得到多达50个。在我查看投诉记录时,我不提前知道这个数字。我基本上想要将每个投诉分配给餐厅的数据结构以供进一步分析。这让我觉得我需要一个锯齿状的阵列......但有些人可能会说我需要一个列表列表。

2 个答案:

答案 0 :(得分:6)

锯齿状阵列似乎不适合这个用例。我会做这样的事情。它具有为每种不同类型的数据提供明确类型字段的好处。

void Main() {
    List<Restaurant> restaurants = new List<Restaurant>();
}

class Restaurant {
    public int Id;
    public List<Complaint> Complaints = new List<Complaints>();
}

class Complaint {
    public string Name;
    public string Address;
    public int Age;
    public DateTime ComplaintDate;
}

答案 1 :(得分:1)

对于内存中存储每个值以进行分组或分析的数据结构,我建议使用Dictionary。关键是餐馆ID,价值是投诉列表。如果您要设置一些表示逻辑,或者快速获取其中一个值,这对分组很有用。

class Complaint
{
 RestaurantId, Name, Address, etc.
}

var AllComplaints = new Dictionary<int,List<Complaint>>();
var complaint = new Complaint();
if( AllComplaints.HasKey(complaint.RestaurantId) )
{
 AllComplaints[complaint.RestaurantId].Add(complaint);
}else{
 AllComplaints[complaint.RestaurantId] = new List<Complaint>();
 AllComplaints[complaint.RestaurantId].Add(complaint);
}

但是,如果您要将此信息保存到数据库中,则需要使用不同的结构来映射到数据库,类似于@recursive所示。