この質問は、C#、LINQのグループ化とコレクションに関係しています。どのC#データ構造を使用すべきですか?
私は現在、グループ化の問題に取り組んでおり、コミュニティからのフィードバックを得たいと考えていました。私は過去にこの問題を抱えていましたが、自分のデータ構造を書くことを考えています。詳細はこちら
メーカーと製品で構成され、データ構造が製造元によってグループ化されているとします。多くのメーカーと多くの製品があります。メーカーはそれぞれ固有の名前とIDを持っています。製品の名前は似ているかもしれませんが、ユニークなIDを持っています。進行中のリストは、例を表しています。
フォード1、祝祭1945年トーラス6413、フュージョン4716、F1 8749、
トヨタ2、カムリ1311プリウス6415、カローラ1117タコマ9471
シボレー3、シルバラード4746、Camero 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);
}
}
なぜもう1つ必要ですか?なぜ匿名タイプを使用しないのですか? –
データはどのように引き継がれますか?あなたは製造業者によって製品のリストを調べる必要がありますか?または、製品の製造元を見つけることができますか?または何? – SirPentor
私はasp.netのツリービューコントロールにデータを使用しています。データベースからのデータはグループ化されずに戻ってくるので、データを簡単にグループ化して、イベントによってデータがフィルタリングされたときに簡単にアクセスできるようにしたい。 – Halcyon