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

本文关键字:列表 数据结构 锯齿状 数组 什么 我应该 | 更新日期: 2023-09-27 18:32:52

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

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

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

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

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

交错数组似乎不太适合这个用例。 我会做这样的事情。 它的好处是为每种不同类型的数据提供明确键入的字段。

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

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