Tablica jednowymiarowa, jak wypełnić? - Pomocy

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

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>()

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

pozniej zrobilbym cos na zasadzie

var tab_rm = new List<string>()
foreach (var item in userInput)
{
  for (int index = 0 ; index < item.Value ; index++)
  {
    tab_rm.Add(item.Key);
  }
}
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:

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

1

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

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.

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ć?

0

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

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

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:

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

albo tak:

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.

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.

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

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

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ć

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1