Java týden
30 % bodů zdarma na online výuku díky naší Slevové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se Javy.
Avatar
Wayne
Člen
Avatar
Wayne:11.7.2019 19:28

Ahoj, mohl by mě někdo poradit jak lze udělat v LINQu to když se mi nyní vrátí kolekce 2 objektů se stejným Name, tak abych z toho udělal jeden záznam, který však bude obsahovat Parameters jak z prvního záznamu tak i z druhého. Formát je takový to
{
ID:1,
Name : Test,
Parameters
{.
.
.
}},

{
ID:2,
Name : Test,
Parameters
{.
.
.
}},

Předem díky za rady

 
Odpovědět
11.7.2019 19:28
Avatar
Odpovídá na Wayne
Michael Škrášek:11.7.2019 21:59

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;
}
Editováno 11.7.2019 22:00
Nahoru Odpovědět
11.7.2019 21:59
I choose a lazy person to do a hard job. Because that person will find an easy way to do it ... Bill Gates
Avatar
tesař.tech
Redaktor
Avatar
tesař.tech:11.7.2019 22:28

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();
           });
 
Nahoru Odpovědět
11.7.2019 22:28
Avatar
tesař.tech
Redaktor
Avatar
Odpovídá na Michael Škrášek
tesař.tech:11.7.2019 22:35

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..

 
Nahoru Odpovědět
11.7.2019 22:35
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Odpovídá na tesař.tech
Michael Škrášek:11.7.2019 22:45

vlastně máme stejné řešení, akorát já vytvářím nový objekt (horší možnost), ty vezmeš ten první a upravíš ho ...

Nahoru Odpovědět
11.7.2019 22:45
I choose a lazy person to do a hard job. Because that person will find an easy way to do it ... Bill Gates
Avatar
vajkuba1234
Člen
Avatar
Odpovídá na Wayne
vajkuba1234:11.7.2019 22:55

Klidne pouzij ToLookup extension metodu.
Viz https://docs.microsoft.com/…ble.tolookup?…

Nahoru Odpovědět
11.7.2019 22:55
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Avatar
vajkuba1234
Člen
Avatar
vajkuba1234:12.7.2019 12:59

Blbost, ja spatne cetl zadani...

Nahoru Odpovědět
12.7.2019 12:59
No hope, no future, JUST WAR! For world peace Israel must be DESTROYED!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.