Tablica z różnymi typami danych

Tablica z różnymi typami danych
DU
  • Rejestracja:prawie 12 lat
  • Ostatnio:około rok
  • Postów:55
0

Witam,
Tworzę plugin do jednego programu i w jednej z sekcji pluginu muszę zdefiniować poniższy schemat:
"NazwaFunkcji1", paramDodatkowyTypuInt1, IlośćParametrówUżytkownikaTypuInt, TablicaParamUżytkownika[]
"NazwaFunkcji2", paramDodatkowyTypuInt2, IlośćParametrówUżytkownikaTypuInt, TablicaParamUżytkownika[]
"NazwaFunkcji3", paramDodatkowyTypuInt3, IlośćParametrówUżytkownikaTypuInt, TablicaParamUżytkownika[]
Następnie w innej metodzie obrabiam te dane w jednej pętli podstawiając do odpowiednich zmiennych dane z powyższej tabeli.
Proszę o pomoc jak mogę ułatwić sobie życie. Jak zrobi taką tablicę?

edytowany 1x, ostatnio: duzers
kzkzg
I z czym konkretnie masz problem?
DU
  • Rejestracja:prawie 12 lat
  • Ostatnio:około rok
  • Postów:55
0

Ok. Zrobiłem tak:

Kopiuj
    public class MojeDane
    {
        public string nazwaFunkcji;
        public int paramDodatkowy;
        public int iloscParametrowUsera;
        public int[] parametryUsera;
    }
Kopiuj
            List<MojeDane> mojedane = new List<MojeDane>();
            mojedane.Add(new MojeDane { nazwaFunkcji = "MyFunction1", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera =  new int[] { 3, 4 } });

Można lepiej?

SY
DU
  • Rejestracja:prawie 12 lat
  • Ostatnio:około rok
  • Postów:55
0

No dobrze. A czy istnieje możliwość definiowania wartości Listy bez potrzeby pisania nazw zmiennych?

Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
0

Jeśli elementy listy masz z góry znane to możesz zainicjalizować listę tak:

Kopiuj
List<MojeDane> mojedane = new List<MojeDane>
{
    new MojeDane { nazwaFunkcji = "MyFunction1", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } },
    new MojeDane { nazwaFunkcji = "MyFunction2", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } }
};

Tylko ponazywaj to jakoś wszystko inaczej, nie iloscParametrowUsera, błagam.
Poza tym akurat ilość parametrów ci nie potrzebna jako osobna wartość, zawsze możesz pobrać rozmiar tablicy.

edytowany 3x, ostatnio: Azarien
DU
  • Rejestracja:prawie 12 lat
  • Ostatnio:około rok
  • Postów:55
0
Azarien napisał(a):

Jeśli elementy listy masz z góry znane to możesz zainicjalizować listę tak:

Kopiuj
List<MojeDane> mojedane = new List<MojeDane>
{
    new MojeDane { nazwaFunkcji = "MyFunction1", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } },
    new MojeDane { nazwaFunkcji = "MyFunction2", paramDodatkowy = 3, iloscParametrowUsera=2, parametryUsera = new int[] { 3, 4 } }
};

tylko ponazywaj to jakoś wszystko inaczej, nie iloscParametrowUsera, błagam.

Bardziej chodziło mi o skrócenie linii do czegoś w rodzaju:

Kopiuj
new MojeDane{"MyFunction1",3,2,{3,4}}....

Chyba tu http://www.altcontroldelete.pl/artykuly/operacje-na-kolekcjach-w-c-/ mam odpowiedź.

WeiXiao
  • Rejestracja:około 9 lat
  • Ostatnio:około 14 godzin
  • Postów:5122
0

W sumie jest jedno rozwiązanie, ale jest ono wręcz unsafe (nie keyword) i możliwe, że unpredictable, bo trudno powiedzieć co będzie robić w następnej wersji C#.

Kopiuj
public static void Main(string[] args)
{
    Foo(__arglist("test", 1, 2.5, 3, new int[]{1,2}));
}

static void Foo(__arglist)
{
    ArgIterator iter = new ArgIterator(__arglist);

    for (int n = iter.GetRemainingCount(); n > 0; n--)
    {
        var p = TypedReference.ToObject(iter.GetNextArg());

        Console.WriteLine(p.GetType());
    }
}

wynik:

Kopiuj
System.String
System.Int32
System.Double
System.Int32
System.Int32[]

Lecz wrzucam to bardziej jako ciekawostkę niż realne rozwiązanie problemu, bo jest to coś, czego raczej nie chcesz w biznesie użyć.

edytowany 8x, ostatnio: WeiXiao
SO
Jakaś zaleta tego czegoś nad standardowym params object[]?
somekind
Można zaimponować jakiemuś psycholowi na rozmowie kwalifikacyjnej.
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:4 dni
  • Lokalizacja:Wrocław
0
duzers napisał(a):

Bardziej chodziło mi o skrócenie linii do czegoś w rodzaju:

Kopiuj
new MojeDane{"MyFunction1",3,2,{3,4}}....

To zdefiniuj sobie konstruktor, wtedy będziesz miał: lista.Add(new MojeDane("MyFunction1", 3, 2, { 3, 4 }));.

DU
  • Rejestracja:prawie 12 lat
  • Ostatnio:około rok
  • Postów:55
0
somekind napisał(a):
duzers napisał(a):

Bardziej chodziło mi o skrócenie linii do czegoś w rodzaju:

Kopiuj
new MojeDane{"MyFunction1",3,2,{3,4}}....

To zdefiniuj sobie konstruktor, wtedy będziesz miał: lista.Add(new MojeDane("MyFunction1", 3, 2, { 3, 4 }));.

Jest zrobione na wzór tego:

Kopiuj
    public class Person
    {
        public int PersonId { get; private set; }
        public string FirstName { get; private set; }
        public string LastName { get; private set; }
        public int[] Tablica{ get; private set; }
 
        public Person(int nPersonId, string sFirstName, string sLastName, int[] nTablica)
        {
            PersonId = nPersonId;
            FirstName = sFirstName;
            LastName = sLastName;
            Tablica= nTablica;
        }
    }

Tylko nie wiem jak z definicji pozbyć się **new int[] **
....

Kopiuj
new Person(111, "Jacek","Placek", new int[] { 11, 22 }),

....
Chcę się tego pozbyć dla maksymalnego uproszczenia :)

edytowany 1x, ostatnio: duzers
WeiXiao
A dlaczego chcesz się go pozbyć?
heyyou
jeśli ta tablica będzie ostatnim parameterem użyj params: public Person(int nPersonId, string sFirstName, string sLastName, params int[] nTablica) nie sprawdzałem, ale powinno śmigać :D
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:4 minuty
2

Albo nawet tak:

Kopiuj
        public class Person
        {
            public Person(int nPersonId, string sFirstName, string sLastName, params int[] nTablica)
            {
                ;
            }
        }

        public class PersonList : List<Person>
        {
            public void Add(int nPersonId, string sFirstName, string sLastName, params int[] nTablica)
            {
                Add(new Person(nPersonId, sFirstName, sLastName, nTablica));
            }
        }

        List<Person> mojedane = new PersonList
        {
            { 123, "Jan", "Kowalski", 1, 2, 3 },
            { 124, "Anna", "Nowak", 4, 5, 6, 7, 8 }
        };
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)