假设我在卫生署工作,并编制了食物中毒顾客的投诉记录。我还有一个我所在城市的餐馆列表,这些餐馆被分配了一个5位数字。对于每个投诉,我都知道以下信息:
我想将投诉与餐馆匹配,以便列表或数组或数据结构中的第一个元素是5位数ID。任何特定餐厅的其余数据结构将包含食物中毒受害者的姓名/地址/年龄,以及投诉日期。
现在记住,一些餐馆会得到0个投诉而其他餐馆可能会得到多达50个。在我查看投诉记录时,我不提前知道这个数字。我基本上想要将每个投诉分配给餐厅的数据结构以供进一步分析。这让我觉得我需要一个锯齿状的阵列......但有些人可能会说我需要一个列表列表。
答案 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所示。