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

C# użycie funkcji Split przy tablicy string

+1 głos
98 wizyt
pytanie zadane 29 października 2021 w C# przez VerneX Nowicjusz (130 p.)

Hej, 

Na pewno wielu z Was kojarzy książkę, "Wstęp do programowania w C# Łatwy podręcznik dla początkujących". Jest tam oto takie zadanie:

"W danej firmie środki trwałe mają identyfikatory złożone z kilku liter, myślnika oraz czterech cyfr. Te cztery cyfry to rok zakupu danego środka trwałego. Przykładowe identyfikatory to: KOMG-2002, BH-2010. Napisz program, który deklaruje 5-cio elementową tablicę typu string dla środków trwałych, którą należy zainicjalizować przykładowymi identyfikatorami w czasie deklaracji. Program ma dla każdego środka trwałego podać liczbę lat, jakie upłynęły od jego zakupu."

 

I tu moje pytanie moja tablica wygląda następująco:

string[] tab = { "xxxx-2010", "yyy-2012", "zz-2014", "aaaa-2018", "bbbbbbb-2021" };

spróbowałem wykonać kod:

string[] tab = { "komp-2010", "lap-2012", "ps-2014", "xbox-2018", "lodowka-2021" };

            for(int i = 0; i > tab.Length; i++)
            {
                string[] subs = tab.Split('-');
            }
            Console.ReadLine();

Ale dostaje błąd CS1061

I tak wszędzie gdzie szukałem na internecie i wielu poradnikach wszyscy pokazują jak użyć funkcji split ale w przypadku string gdy wygląda następująco:

string tab = "komp-2010, lap-2012, ps-2014, xbox-2018, lodowka-2021";

 

I teraz pytanie właściwe: Czy istnieje jakieś rozwiązanie robiące split mojej tablicy, czy tak się tablicy nie zapisuje i powinna być tak jak wyżej?

2 odpowiedzi

0 głosów
odpowiedź 29 października 2021 przez adrian17 Ekspert (320,820 p.)
            for(int i = 0; i > tab.Length; i++)
            {
                string[] subs = tab.Split('-');

hint: zauważ, że nigdzie tutaj w środku pętli nie używasz `i` :)

 

Jak chcesz operować na i-tym elemencie tablicy, to musisz ją zaindeksować - używając `[i]`. Alternatywnie, znacznie prościej nie myśleć o indeksach i po prostu użyć pętlę `foreach`.

komentarz 29 października 2021 przez VerneX Nowicjusz (130 p.)

To już jest któraś wersja kodu wiec dużo razy zmieniałem wiem, że powinno być coś w tym stylu

for(int i = 0; i > tab.Length; i++)
{

    string[] subs[i] = tab[i].Split('-');
}

 

ale taki kod też mi nie działa komunikat błędu taki sam

komentarz 29 października 2021 przez adrian17 Ekspert (320,820 p.)
No, raczej nie ten sam błąd...? Bo teraz z kolei `subs[i]` nie ma sensu, nie ma czegoś takiego jak "indeksowanie w nazwie zmiennej". To wcześniej było dobre.
0 głosów
odpowiedź 29 października 2021 przez Velta Nałogowiec (46,590 p.)

Należy rozdzielać elementy tablicy, nie tablicę:

List<string[]> arrays = new();
foreach (string element in tab)
{
    arrays.Add(element.Split('-'));
}
komentarz 29 października 2021 przez draghan VIP (105,920 p.)

Albo to samo inaczej, używając LINQ:

using System.Linq;

// ...

var yearsList = tab.Select(element => element.Split('-')).ToList();

 

komentarz 30 października 2021 przez VerneX Nowicjusz (130 p.)

Niestety nie ogarniam jeszcze funkcji LINQ, natomiast wymyśliłem rozwiązanie i pewnie dla większości z Was jest ono głupie, ale dla mnie jak na początek jeżeli działa to nie jest głupie :D

 

            string[] tab = { "komp-2010", "lap-2012", "ps-2014", "xbox-2018", "lodowka-2021" };
            string[] sub;
            var str = String.Join("-", tab);
            Console.WriteLine(str);

            sub = str.Split('-');

            for (int i = 0; i < sub.Length; i++)
            {
                Console.Write("Dla produktu ");
                Console.Write(sub[i]);
                Console.Write(" data zakupu to: ");
                i += 1;
                Console.Write(sub[i]);
                Console.WriteLine("");
            }

            Console.ReadLine();

 

1
komentarz 30 października 2021 przez draghan VIP (105,920 p.)

Nie jest "głupie", powiedziałbym że podejście połączenia wszystkiego myślnikiem i potem posplitowanie po myślniku jest całkiem interesujące.

Aczkolwiek powinieneś wyrobić sobie nawyk zwracania uwagi na to, jakich struktur danych używasz i do czego są one wykorzystywane.

Tutaj, w tablicy `sub`, przechowujesz wrzucone luzem dane pomieszanych wszystkich produktów i co więcej - pomieszanych ich nazw i dat zakupu:

W podejściu zaproponowanym wcześniej - czyli splitując osobno każdy element i dodając wynik do listy, dostajemy coś bardziej ustrukturyzowanego: listę która zawiera dane każdego produktu z osobna, gdzie pod indywidualnym indeksem masz dane tylko jednego produktu: jego nazwę i datę zakupu.

Na takiej liście się łatwiej operuje, bo jest logicznie poukładana. Nie polegasz w programie na niezapisanej wprost zasadzie, że co dwa indeksy w `tab` zmienia się produkt; stąd już tylko nieduży krok do ponazywania anonimowych zmiennych siędzących pod indeksami 0, 1 każdej "podlisty" i wrzucenia ich w nazwaną strukturę/klasę. Ale to, zakładam, będziesz dopiero przerabiał. :)

1
komentarz 30 października 2021 przez VBService Mędrzec (172,940 p.)
edycja 30 października 2021 przez VBService

@VerneX, Twoja pierwsza wersja nie była taka zła ...

Program ma dla każdego środka trwałego podać liczbę lat, jakie upłynęły od jego zakupu

( on-line )

using System;
 
class HelloWorld {
  static void Main() {
    string[] tab = { "komp-2010", "lap-2019", "ps-2014", "xbox-2018", "pralka-2020", "lodowka-2021" };
  
    for(int i=0; i<tab.Length; i++)
    {
        string[] subs = tab[i].Split('-');
        Console.WriteLine($"Dla produktu: {subs[0]}");
         
        int span = DateTime.Now.Year - Convert.ToDateTime($"1/1/{subs[1]}").Year;
        string year_pl = (span <= 1)  ?
                         ((span == 0) ? "nie uplynol jeszcze rok" : "uplynol rok") :
                         (span < 5)   ? $"uplynely {span} lata"   : $"uplynelo {span} lat";
                          
        Console.WriteLine($"Od daty zakupu {year_pl}\n");
    }
     
    Console.ReadLine();
  }
}

 

Podobne pytania

0 głosów
1 odpowiedź 88 wizyt
pytanie zadane 29 grudnia 2021 w SQL, bazy danych przez okti00 Obywatel (1,280 p.)
0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 29 grudnia 2018 w Java przez krzycholl18 Nowicjusz (220 p.)
0 głosów
3 odpowiedzi 530 wizyt
pytanie zadane 13 sierpnia 2019 w C# przez AidenX Nowicjusz (150 p.)

88,407 zapytań

137,018 odpowiedzi

305,805 komentarzy

58,661 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...