Tablica jednowymiarowa, jak wypełnić? - Pomocy

Tablica jednowymiarowa, jak wypełnić? - Pomocy
SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

Dzień Dobry, piszę program w którym napotykam problem - mianowicie nie potrafię wypełnić tablicy w odpowiedniej sekwencji mająć pewne dane.
Przedstawie to na screenie oraz opiszę to:
screenshot-20210610091356.png

Użytkownik programu wpisuje dane do DGV w taki oto sposób: 2 kolumny i N(max10) wierszy.
Program zapisuje mi wartości R to tablicy jednowymiarowej. W drugiej kolumnie użytkownik podaje ile razy ma się powtótrzyć dany R.
Na screenshocie jest to pokazane - jest także pokazane jak ma wyglądać wypełniona tablica - odpowiednio podanymi danymi.

No i teraz pytanie. jak z tablicy R, przepisać dane do innej tablicy w takiej sekwencji? Czy muszę utworzyć także tablicę do drugiej kolumny? Jak by mogło wyglądać wypełnianie takiej tablicy np pętlą for?

Proszę was o pomoc. W razie czego podeślę kod, który już mam napisany.

Pozdrawiam

fasadin
  • Rejestracja:prawie 14 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
0

Użytkownik programu wpisuje dane do DGV w taki oto sposób: 2 kolumny i N(max10) wierszy.

jak zapisujesz to co wpisuje uzytkownik? W jakim formacie sa te dane?

Jezeli mialbym to zrobic to trzymałbym ta tabele w taki sposob
Dictionary<string, int> userInput = new Dictionary<string,int>()

Kopiuj
userInput["R0"] = 2;
userInput["R1"] = 1;
userInput["R2"] = 3;
userInput["R3"] = 4;
userInput["R4"] = 1;

pozniej zrobilbym cos na zasadzie

Kopiuj
var tab_rm = new List<string>()
foreach (var item in userInput)
{
  for (int index = 0 ; index < item.Value ; index++)
  {
    tab_rm.Add(item.Key);
  }
}
SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

@fasadin:
Te dane użytkownik podaje w dataGridView i w programie jest to zrobione tak że po kliknięciu przycisku oblicz, te dane spisane są do tablicy jednowymiarowej w taki sposob jak jest pokazane:

Kopiuj
R = new int[dgv1.Rows.Count];
            for(int i = 0;i<dgv1.Rows.Count;i++)
            {
                R[i] = (int)dgv1[1, i].Value;
            }

Ma to być zrobione najprościej jak się da, najlepiej na pętli for z ifami może - jak kolwiek - byle prosto

maszrum
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Lokalizacja:Kraków
  • Postów:219
1

Żeby nie podawać gotowego rozwiązania to masz tu podpowiedź z Linq:

Kopiuj
var tabRM = R
    .Select((element, index) => ???)
    .SelectMany(r => r)
    .ToArray();

I do tego kolejna podpowiedź: jest coś takiego jak Enumerable.Repeat(T element, int count). Jak to poskładasz do kupy to dostaniesz swoje rozwiązanie.

SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

@maszrum: Niestety nie skorzystam z tego, nie potrafię obsłużyć tego tymi 'funkcjami'. A innej możliwosci nie widać? Jakby to inaczej mogło wyglądać?

AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
0

Kolejny zabłąkany użytkownik, co się miota z przechowywaniem danych w DataGrid

Uzyj modelu, do Grida podłącza się przez property DataSource


Bo C to najlepszy język, każdy uczeń ci to powie
maszrum
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Lokalizacja:Kraków
  • Postów:219
0

Masz dwie opcje. Pętlami, jak pokazał to @fasadin. Tylko musiałbyś przerobić lekko jego kod, bo on w momencie pisania swojego posta nie znał twoich struktur danych. Druga opcja to "te funkcje". Musisz poznać LINQ, bo to jeden z najważniejszych tematów w C#/NET. Z moich podpowiedzi wynika, że rozwiązanie będzie wyglądało tak:

Kopiuj
var tabRM = R
    .Select((element, index) => Enumerable.Repeat(element, index))
    .SelectMany(r => r)
    .ToArray();

albo tak:

Kopiuj
var tabRM = R
    .Select((element, index) => Enumerable.Repeat(index, element))
    .SelectMany(r => r)
    .ToArray();

Spróbuj które z nich jest poprawne i zastanów się dlaczego. Żeby zobaczyć o co w tym chodzi możesz użyć debuggera, tymczasowo wyrzucić linię z SelectMany i wtedy podejrzeć rezultat.

SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

Naprawdę nie da się tego ogarnąć dwoma pętlami for? Np jakbym utworzył tablicę dwuwymiarową i te dane z DGV tam wrzucił i potem z tej dwuwymiarowej tablicy przepisał pętlami do tablicy jednowymiarowej w odpowiedniej sekwencji.

maszrum
No przecież napisałem, że się da. Nawet masz prawie gotowe rozwiązanie, w pierwszej odpowiedzi, tylko musisz troszkę zmienić.
SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

Tak, ale to jest na zasadzie że wpisuje wartość string ="R1"
a to chodzi o to że tam są podawane konkretne wartości liczbowe. Ma to być np: Rm = { 1,1,1,2,2,4,5,5,5 }
Wartość R powtórzona M razy

SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

do dyspozycji mam tablice R, indexowaną od 0 do N, i w niej są wartosci R po kolei ułożone. Teraz chcę przepisać je do innej tablicy, ale w sekwencji takiej jak pokazałem wczesniej na screenie

SS
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:12
0

@Szymon Szulik: Ile ma być powtórzone np R1 - decyduje o tym użytkownik wpisując dane do dgv( z ktorego ja je mogę wpisać do tablicy) - i teraz mam dane w 2 tablicach i tylko na nich operuje - chcąc wpisać te dane do kolejnej tablicy, tej którą chce uzyskać

obscurity
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
0

Dostałeś nawet dwa różne rozwiązania. Z czym konkretnie masz problem? Umiesz w ogóle odczytać te dane z datagrida? Pokaż kod


"A car won't take your job, another horse driving a car will." - Horse influencer, 1910

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.