-1

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

  • 餐厅的 5 位数 ID
  • 食物中毒受害者姓名/地址/年龄
  • 投诉日期

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

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

4

2 回答 2

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;
}
于 2013-09-26T17:01:47.047 回答
1

对于内存中存储每个值以进行分组或分析的数据结构,我建议使用字典。键是餐厅 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 所示的结构。

于 2013-09-26T17:02:47.483 回答