WebHU - Programozási kérdések és válaszok

C# Elem keresése a String Arrays listában

Már több órája nem tudok megoldani egy problémát. Íme egy egyszerűsített forgatókönyv. Tegyük fel, hogy van egy lista azokról az emberekről, akiknek ajánlataik vannak. Megpróbálok keresni egy személyt, aki a legmagasabb ajánlatot teszi, és visszaadni a nevet. Meg tudom találni a legmagasabb ajánlatot, de hogyan tudom kiírni a nevet?

        List<String[]> list = new List<String[]>();
        String[] Bob = { "Alice", "19.15" };
        String[] Alice = {"Bob", "28.20"};
        String[] Michael = { "Michael", "25.12" };

        list.Add(Bob);
        list.Add(Alice);
        list.Add(Michael);

        String result = list.Max(s => Double.Parse(s.ElementAt(1))).ToString();

        System.Console.WriteLine(result);

Ennek eredményeként 28,20-at kapok, ami helyes, de helyette a "Bob"-t kell megjelenítenem. Annyi kombináció volt a list.Select()-el, de nem sikerült. Kérem valakit?

c#
15.08.2012

  • Szótár használata helyett bölcsebb lehet egy osztályt használni ehhez. Nézze meg Michel Keijzers válaszát 15.08.2012

Válaszok:


1

Működnie kell:

var max = list.Max(t => double.Parse(t[1]));
list.First(s => double.Parse(s[1]) == max)[0]; // If list is not empty
15.08.2012
  • Köszönöm szépen, ez a válasz, amit kerestem! Talán nem annyira elegáns, mint egy osztályt meghatározó, de nagyon igyekeztem elkerülni. Egészségére! 15.08.2012

  • 2

    Építészeti szempontból a legjobb megoldás egy külön osztály létrehozása (pl. Személy), amely minden egyes személy neve és ajánlata két tulajdonságot tartalmaz, valamint egy Személyek osztályt, amely a személyek listáját tartalmazza.

    Ezután könnyen használhat egy LINQ parancsot.

    Ahelyett, hogy az ajánlatokat karakterláncként tárolná, gondolja át, hogy jobbak-e az ajánlatok lebegőpontos vagy tizedesértékként (vagy tárolja centben, és használjon int értéket).

    Nincs kézi fordítóm, így egy kicsit kiment a fejemből:

    public class Person
    {
        public string Name { get; set; }
        public float  Bid  { get; set; }
    
        public Person(string name, float bid)
        {
            Debug.AssertTrue(bid > 0.0);
            Name = name;
            Bid = bid;
        }
    }
    
    public class Persons : List<Person>
    {
        public void Fill()
        {
            Add(new Person("Bob", 19.15));
            Add(new Person("Alice" , 28.20));
            Add(new Person("Michael", 25.12));
        }
    }
    

    Az osztályodban:

    var persons = new Persons();
    persons.Fill();
    
    var nameOfHighestBidder = persons.MaxBy(item => item.Bid).Name;
    Console.WriteLine(nameOfHighestBidder);
    
    15.08.2012
  • Egyetértek, az osztályt könnyebb lenne kezelni. De a probléma természetéből adódóan (webes szolgáltatások stb.) nem akartam további osztályt létrehozni. Köszönöm az idődet! 15.08.2012
  • Az ott használt Max metódus nem ad vissza int-et? 15.08.2012
  • Egyáltalán nem probléma... Mindenesetre kiterjesztettem a választ, hogy megmutassam másoknak, hogyan segíthetnek az órák az olvashatóság javításában és a felelősségek megosztásában. 15.08.2012
  • A Max-ot MaxBy-re változtattam, feltételezve, hogy a maximális licittel rendelkező személyt adja vissza, majd felvettem ennek a személynek a nevét. 15.08.2012
  • Ez a MoreLinq? Nem emlékszem MaxBy-re a .NET-keretrendszerben. 17.03.2019
  • @ŞafakGür Igen ... lásd: stackoverflow.com/questions/3188693/ 17.03.2019

  • 3

    Ez az egyszerű példában működik. Nem biztos az igaziban

    var result = list.OrderByDescending(s => Double.Parse(s.ElementAt(1))).First();
    
    15.08.2012

    4

    Használhatja a Jon Skeet MaxBy-ját.

    Használatához tekintse meg ezt a kérdést pl. ebben az esetben

    list.MaxBy(s => Double.Parse(s.ElementAt(1)))[0]
    

    További információ itt

    15.08.2012

    5

    Miután megtalálta az eredményt, tegye a következőket:

    list.First(x=>x[1] == result)[0]
    
    15.08.2012
    Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..