• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

c# indeksator dwuwymiarowy

Object Storage Arubacloud
0 głosów
345 wizyt
pytanie zadane 25 maja 2019 w C# przez Mesne191 Początkujący (460 p.)
Cześć,

Wie ktoś może jak napisać indeksator dwuwymiarowy, który przyjmuje jako parametry liczby rzeczywiste lub ciąg znaków? Bo miałem napisać klase Europa, gdzie do obiekt indeksuje sie wspolrzednymi geogarficznymi i zwraca on miasto polozne najblizej tych wspolrzednych, w wersji uproszczonej oczywiscie. Z góry dzieki za pomoc :)
komentarz 25 maja 2019 przez aeragram Obywatel (1,760 p.)
Cześć,

Jak dokładnie ma wyglądać indeksator ? Są jakieś ograniczenia co do indeksatora ? Ma to być liczba rzeczywista np. 50,14 czy też w postaci stringa "50,14", czy może ma być "50,14N", a może "50N14" ? Rozumiem, że ostatecznie chcesz mieć obiekty indeksowane w stylu place["50N14","18E84"]="Home" ?

Pozdrawiam aeragram

2 odpowiedzi

+1 głos
odpowiedź 27 maja 2019 przez aeragram Obywatel (1,760 p.)
wybrane 4 lipca 2019 przez Mesne191
 
Najlepsza

Cześć,

Zmieniłem poprzednie rozwiązanie na takie bardziej optymalne

      class Europe
    {
        private List<City> cities;

        public Europe() { cities = new List<City>(); }

        public string this[double latitude, double longitude]
        {
            get
            {
                if (cities.Count() > 0)
                {
                    City firstCity = cities.First();
                    double minimalDistance = (firstCity.Latitude - latitude)
                                             * (firstCity.Latitude - latitude)
                                             + (firstCity.Longitude - longitude)
                                             * (firstCity.Longitude - longitude);
                    string minimalDistanceCityName = firstCity.Name;

                    foreach (City city in cities)
                    {
                        double actualDistance = (city.Latitude - latitude)
                                                * (city.Latitude - latitude)
                                                + (city.Longitude - longitude)
                                                * (city.Longitude - longitude);
                        if (actualDistance < minimalDistance)
                        {
                            minimalDistance = actualDistance;
                            minimalDistanceCityName = city.Name;
                        }
                    }
                    return minimalDistanceCityName;
                }
                return "";
            }

            set
            {
                City city = new City();
                city.Latitude = latitude;
                city.Longitude = longitude;
                city.Name = value;
                cities.Add(city);
            }
        }

        private class City
        {
            public double Latitude { get; set; }
            public double Longitude { get; set; }
            public string Name { get; set; }
        }

    }

Powinno być ok.

Pozdrawiam aeragram

+1 głos
odpowiedź 25 maja 2019 przez aeragram Obywatel (1,760 p.)

Cześć,

Tak na szybko przyszło mi takie rozwiązanie.

 public class Europe
    {
        private string[,] place = new string[9000, 18000];

        public string this[ float latitude, float longitude ]
        {
            get
            {
                return place[(int)(latitude * 100), (int)(longitude * 100) + 9000];
            }

            set
            {
                place[(int)(latitude * 100), (int)(longitude * 100) + 9000] = value;
            }
        }
     }

class Program
    {
        static void Main(string[] args)
        {
            Europe geoCoord = new Europe();
            geoCoord[50.14f, 18.84f] = "Home";
            geoCoord[40.44f, -3.82f] = "Madrid";
            Console.WriteLine(geoCoord[50.14f, 18.84f]);
            Console.WriteLine(geoCoord[40.44f, -3.82f]);
        }
    }

Oczywiście trzeba jeszcze dołożyć sprawdzanie zakresu, ale taki na szybko pomysł do dalszej obróbki :)

Pozdrawiam aeragram

 

komentarz 25 maja 2019 przez aeragram Obywatel (1,760 p.)
Po zastanowieniu się stwierdzam, że ten pomysł jest jednak bardzo nieoptymalny. Dane zajmują bardzo dużo miejsca, a wyszukanie najbliższej miejscowości będzie bardzo czasochłonne. Myślę, że lepiej będzie dodać klasę City z polami latitude, longitude, name i w klasie Europe umieścić listę z elementami klasy City. W ten sposób zaoszczędzimy mnóstwo pamięci, a jednocześnie ułatwimy sobie poszukiwanie najbliższej miejscowości. Jak będzie czas to coś naskrobie.
komentarz 26 maja 2019 przez Mesne191 Początkujący (460 p.)
Posiedzę jeszcze nad tym i pomyślę. Dzięki za pomoc :)

Podobne pytania

0 głosów
0 odpowiedzi 425 wizyt
pytanie zadane 5 marca 2023 w C# przez kamil29 Obywatel (1,230 p.)
0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 18 maja 2022 w C# przez xkamiz Użytkownik (500 p.)
+1 głos
1 odpowiedź 493 wizyt
pytanie zadane 23 stycznia 2022 w C# przez dawid2002 Mądrala (5,190 p.)

92,555 zapytań

141,403 odpowiedzi

319,554 komentarzy

61,939 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...