Diskuze: Zgroupování v LINQ
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
S LINQ moc neumím, ale podařilo se mi sesmolit tohle:
class Program
{
static void Main(string[] args)
{
List<Data> collection = new List<Data>(new Data[] {
new Data() {
name = "test",
array = new[] { "a", "b" }
},
new Data() {
name = "test",
array = new[] { "c", "d" }
},
new Data() {
name = "test3",
array = new[] { "c", "d" }
}
});
List<Data> results = collection.GroupBy(e => e.name).Select(e => new Data() { name = e.Key, array = e.SelectMany(f => f.array).ToArray() }).ToList();
Console.ReadKey();
}
}
class Data
{
public string name;
public string[] array;
}
Je to zajímavá úloha, pokud někdo přijde s lepším řešením, jsem docela zvědav. Já jsem přišel na toto s GroupBy.
A podle čeho vybereš, který záznam zachováš a který vyhodíš? Já jsem vzal prostě ten první, ostatní se zahodí.
Tvojí noname třídu jsem přejmenoval na Car.
public class Car
{
public int ID { get; set; }
public List<Parameter> Parameters { get; set; }
public string Name { get; set; }
}
public class Parameter
{
public string ParamName { get; set; }
}
//…
var grupedListOfCars = listOfCars.GroupBy(x=>x.Name);
var listWithoutSameCars = grupedListOfCars.Select(x =>
{
x.First().Parameters = x.SelectMany(c => c.Parameters).ToList();
return x.First();
});
Malá poznámka: Nevýhoda takového řešení je, že v příkazu budeš muset připisovat každou vlastnost (tím, že tam vytváříš nový objekt). Takže když se změní struktura dat (přidá se k nim nějaká vlastnost), musíš měnit i tenhle kus kódu..
vlastně máme stejné řešení, akorát já vytvářím nový objekt (horší možnost), ty vezmeš ten první a upravíš ho ...
Klidne pouzij ToLookup extension metodu.
Viz https://docs.microsoft.com/…ble.tolookup?…
Blbost, ja spatne cetl zadani...
Zobrazeno 7 zpráv z 7.