NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Nevím jak nastavit parametr

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

Aktivity
Avatar
David Mrázek:15.6.2022 14:20

Ahoj, snažím se vytvořit methodu, kde dosadím do parametru hodnoty, tak aby jsem měl, co nejkratší kód.

 var hodnotaMaxX = mapPointList.Max(point => point.X);
                    int indexMaxX = mapPointList.FindIndex(point => point.X == hodnotaMaxX);
                    var hodnotaMaxY = mapPointList.Max(point => point.Y);
                    int indexMaxY = mapPointList.FindIndex(point => point.Y == hodnotaMaxY);
                    var hodnotaMinX = mapPointList.Min(point => point.X);
                    int indexMinX = mapPointList.FindIndex(point => point.X == hodnotaMinX);
                    var hodnotaMinY = mapPointList.Min(point => point.Y);
                    int indexMinY = mapPointList.FindIndex(point => point.Y == hodnotaMinY);
var seznamIndex = new List<int>() { indexMaxX, indexMinX, indexMaxY, indexMinY };

Takto kód mám.

Zkusil jsem: Zkoušel jsem to, co je uvedeno v poslední části, ale to funkční není, vždy mi to vyhodí -1 tudíž neexistujicí hodnotu.

Chci docílit:

private void IndexMax(List<MapPoint> mapPointList, List<int> seznamIndex, Func<MapPoint, double> lambda, Predicate<MapPoint> porovnani)
     {
            var hodnotaMax = mapPointList.Max(lambda);
            int index = mapPointList.FindIndex(porovnani);
           seznamIndex.Add(index);
        }
private void IndexMin(List<MapPoint> mapPointList, List<int> seznamIndex, Func<MapPoint, double> lambda,Predicate<MapPoint>porovnani)
        {
           var hodnotaMin = mapPointList.Min(lambda);
          int index = mapPointList.FindIndex(porovnani);
           seznamIndex.Add(index);
        }

nebo ještě lépe vše do jedné metody.

Odpovědět
15.6.2022 14:20
kde je vůle, tam je cesta
Avatar
zelvicek
Člen
Avatar
Odpovídá na David Mrázek
zelvicek:16.6.2022 7:42

Toto je nejkratší kód, který jsem v rychlosti vymyslel.

internal class Program
{
        private static void Main(string[] args)
        {
                MapPoint[] mapPointList = new MapPoint[] { new MapPoint { X = 1, Y = 1 }, new MapPoint { X = 0, Y = 0 }, new MapPoint { X = 2, Y = 2 } };

                int A(Func<MapPoint,double>a,double b)=>Array.FindIndex(mapPointList,p=>a(p)==b);
                var seznamIndex=new[]{A(p=>p.X,mapPointList.Max(p=>p.X)),A(p=>p.X,mapPointList.Min(p=>p.X)),A(p=>p.Y,mapPointList.Max(p=>p.Y)),A(p=>p.Y,mapPointList.Min(p=>p.Y))};
        }
}

struct MapPoint { public double X, Y; }

Je potřeba dodat, že je to taky asi nejprasáčtější. A hlavně: všechny 4 hodnoty by se měly zjišťovat jediným průchodem zdrojové kolekce kvůli runtime performance.

 
Nahoru Odpovědět
16.6.2022 7:42
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 2 zpráv z 2.