IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.
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.