這個問題適用於C#,LINQ分組和集合。應該使用什麼C#數據結構?
我目前正在研究分組問題,我想從社區獲得一些反饋。過去我遇到過這個特殊的問題,我正在考慮爲它編寫自己的數據結構。以下是詳細信息:
假設您有一個由製造商和產品組成的分組,並且數據結構按製造商分組。有許多製造商和許多產品。每個製造商都有唯一的名稱和編號。這些產品可能有相似的名稱,但它們確實有獨特的ID。程序清單是一個例子。
福特1,嘉年華1945,牛牛6413,融合4716,F1 8749,
豐田2,凱美瑞1311,普銳斯6415,花冠1117,塔科馬9471
雪佛蘭3,Silverado的4746,卡梅羅6473,伏3334,塔霍9974
等等
的數據結構,我會用它來表示這將是
IEnumerable<Manufacturer, ManufacturerID, IEnumerable<Product, ProductID>>
但這不存在。所以我想問社區的問題是你會推薦哪種數據結構,爲什麼?
更新:
我想保持類型匿名並避免動態關鍵字。因此,數據結構將類似於
IEnumerable SomeDataStructure<T, U, V>
另一項要求是,是可以有重複的項目。下面是我在想什麼樣的:
public class MyDataStructure<T, U, V>
{
// make this like a list, not a dictionary
}
更新:
我決定去同一個元組數據結構。它功能強大,易於查詢。前面的代碼是我最終如何使用它來創建我的製造商與車輛的關係。結果是一個非常有序的數據結構,它有獨特的製造商按名稱排序,並按名稱排列相關的唯一車輛。
public class ManufacturersVehicles
{
public int ManufacturerID { get; set; }
public string ManufacturerName { get; set; }
public int VehicleID { get; set; }
public string VehicleName { get; set; }
}
// "data" actually comes from the database. I'm just creating a list to use a mock structure to query against.
var data = new List<ManufacturersVehicles>
{
{ ManufacturerID = 1, Manufacturer = "Ford", VehicleID = 1945, VehicleName = "Fiesta" },
{ ManufacturerID = 1, Manufacturer = "Ford", VehicleID = 6413, VehicleName = "Taurus" },
{ ManufacturerID = 1, Manufacturer = "Ford", VehicleID = 4716, VehicleName = "Fusion" },
etc...
};
// Get a collection of unique manufacturers from the data collection and order it by the manufacturer's name.
var manufacturers = data.Select(x => new { ManufacturerID = x.ManufacturerID, ManufacturerName = x.ManufacturerName })
.Distinct()
.OrderBy(x => x.ManufacturerName)
.Select(x => Tuple.Create(x.ManufacturerID, x.ManufacturerName, new Dictionary<int, string>()))
.ToList();
// Add the manufacturer's vehicles to it's associated dictionary collection ordered by vehicle name.
foreach (var manufacturer in manufacturers)
{
// Get the collection of unique vehicles ordered by name.
var vehicles = _alertDetails.Where(x => x.ManufacturerID == manufacturer.Item1)
.Select(x => new { VehicleID = x.VehicleID, VehicleName = x.VehicleName })
.Distinct()
.OrderBy(x => x.VehicleName);
foreach (var vehicle in vehicles)
{
manufacturer.Item3.Add(vehicle.VehicleID, vehicle.VehicleName);
}
}
爲什麼你還需要一個?爲什麼不使用匿名類型? –
數據如何加入?你需要查看製造商的產品清單嗎?或找到產品的製造商?或者是什麼? – SirPentor
我正在使用這些數據來填充asp.net中的treeview控件。來自數據庫的數據沒有任何分組,我想要一個數據結構來輕鬆分組數據,以便在事件導致數據過濾時輕鬆訪問。 – Halcyon