Czy tablica może przechowywać elementy, które posiada każdy element listy

0

w skrócie mam listę, dla której każdy element ma 6 itemów Item1, Item2 ... Item6
i teraz chciałbym te 6 elementów umieścić w tablicy
tab[0] = Item1
tab[1] = Item2

aby móc zamiast list.Item1 = 1 odwoływać się tak:
list.tab[0] =1;

Jak np robiłem to na tablicy buttonów to później mogłem się odwołać do każdego przycisku, czy da się to zrobić dla tych elementów listy?

2
mdlejtecole napisał(a):

w skrócie mam listę, dla której każdy element ma 6 itemów Item1, Item2 ... Item6
i teraz chciałbym te 6 elementów umieścić w tablicy
tab[0] = Item1
tab[1] = Item2

aby móc zamiast list.Item1 = 1 odwoływać się tak:
list.tab[0] =1;

Jak np robiłem to na tablicy buttonów to później mogłem się odwołać do każdego przycisku, czy da się to zrobić dla tych elementów listy?

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    DoStuff().ToList().ForEach(Console.WriteLine);
  }
 
  private static int[] DoStuff()
  {
	var values = new [] { new int[]{ 1, 2 }, new int[]{ 3, 4 }, new int[]{ 5, 6 }, new int[]{ 7, 8 } };
    var result = values.SelectMany(x => x).Distinct();
	return result.ToArray();
  }
}
1
2
3
4
5
6
7
8

https://dotnetfiddle.net/lQAvZr

0

hej

najszybciej to do tej tymczasowej tablicy załaduj co takiego list.tab[0];1. lub w dwóch kolumnach.. przy próbie odwodniania się do do 1 przeglądasz tablice i znajdujesz to list.tab[0]..

0
sight napisał(a):

hej

najszybciej to do tej tymczasowej tablicy załaduj co takiego list.tab[0];1. lub w dwóch kolumnach.. przy próbie odwodniania się do do 1 przeglądasz tablice i znajdujesz to list.tab[0]..

ObservableCollection<ChampionsChosen> chosen = new ObservableCollection<ChampionsChosen>();
var a = chosen.First(d => d.Name == cham);
            string[] tab = new string[6];
            tab[0] = Item1;

            ChampionsChosen[] tab1 = new ChampionsChosen[6];
            tab[0] = Item1;


            ChampionsChosen[] tab2 = new ChampionsChosen[6];
            tab[0] = a.Item1;

nie do końca rozumiem, tworząc takie 3 tablice, tylko ta 3 nie wywala błędu, ale nie mogę się odwołać do tego bo wywołując tab[0] = 1 nadpisuję to co jest w tablicy. Musiał bym umieścić sam Item1, ale dla żadnej zmiennej nie jest poprawny. Dlatego pytam, czy jest jakiś typ tablicy, który przechowa tylko Item1 i będzie wiedział, że to element listy.

0
szydlak napisał(a):

Może zainteresuj się Indeksatorami: https://docs.microsoft.com/pl-pl/dotnet/csharp/programming-guide/indexers/using-indexers

korzystam z tego i nie rozumiem jak to miało by rozwiązać mój problem

0

Tworzysz klasę która ma te 6 elementów (w sensie tablice z 6 elementami), do tej klasy indekser i możesz się odwoływać do tych elementów. Jeśli to nie rozwiązuje problemu to pokaż bardziej szczegółowy kod.

0
szydlak napisał(a):

Tworzysz klasę która ma te 6 elementów (w sensie tablice z 6 elementami), do tej klasy indekser i możesz się odwoływać do tych elementów. Jeśli to nie rozwiązuje problemu to pokaż bardziej szczegółowy kod.

 ObservableCollection<ChampionsChosen> chosen = new ObservableCollection<ChampionsChosen>();
            var a = chosen.First(d => d.Name == cham);
            var picked = itemClass.First(d => d.Name == item);
            string[] tab = new string[6];
            tab[0] = Item1;
            tab[1] = Item2;
            tab[2] = Item3;
            tab[3] = Item4;
            tab[4] = Item5;
            tab[5] = Item6;
            for (int i = 0; i < 6; i++)
            {
                if (picked.Name == itemchampions[i, 0])
                {
                    if (picked.Status == false)
                    {
                        a.Item1 = picked.Name;
                        //a.tab[1] = picked.Name;
                        
                        countClass.First(d => d.Name == picked.Name).Count = countClass.First(d => d.Name == picked.Name).Count + 1;
                    }
                    else
                    {
                        a.Item1 = "";
                        //a.tab[1] = "";
                        countClass.First(d => d.Name == picked.Name).Count = countClass.First(d => d.Name == picked.Name).Count - 1;
                    }
                }

            }
class ChampionsChosen
    {
        public string Photo { get; set; }
        public string Name { get; set; }
        public string Traits1 { get; set; }
        public string Traits2 { get; set; }
        public string Traits3 { get; set; }
        public string Item1 { get; set; }
        public string Item2 { get; set; }
        public string Item3 { get; set; }
        public string Item4 { get; set; }
        public string Item5 { get; set; }
        public string Item6 { get; set; }

    }

Moim problemem jest to, że nie wiem jakiego typu danych musiała by być tablica, żeby umieścić w niej te elementy listy. ta tablica wyrzuca błąd. I chciałbym się odwoływać po przez to co jest okomentowane //a.tab[1] = picked.Name; zamiast a.Item1 = picked.Name;

0

Ale takie coś

a.tab[1] = picked.Name

oznacza, że w obiekcie a typu ChampionsChosen musiałbyś mieć tablicę stringów a nie masz i stąd ten błąd.

Czyli chcesz się odwołać do tablicy w obiekcie a tam jej nie ma

0
ImageButton[] nazwyButton = new ImageButton[16];
            nazwyButton[0] = przycisk1;
            nazwyButton[1] = przycisk2;
            nazwyButton[2] = przycisk3;
            nazwyButton[3] = przycisk4;

if (pobranyPrzycisk.Source == nazwyButton[i].Source)
                    {
                        pobranyPrzycisk.BorderColor = Color.Red;
                        a = i;
                    }

Jak robię tablice buttonów, to później mogę się do nich odwoływać w ten sposób. Tylko, że w moim przypadku tablica musiała by przechowywać elementy listy.

0
mdlejtecole napisał(a):

Moim problemem jest to, że nie wiem jakiego typu danych musiała by być tablica, żeby umieścić w niej te elementy listy. ta tablica wyrzuca błąd. I chciałbym się odwoływać po przez to co jest okomentowane //a.tab[1] = picked.Name; zamiast a.Item1 = picked.Name;

tablica powinno być typu takiego jakiego chcesz przechowywać dane.

0

tablica powinno być typu takiego jakiego chcesz przechowywać dane.

To jakim typem danych są elementy listy ;)

0

screenshot-20190709155424.png
Niestety nie string

0

Odpowiedź jest kilka postów wcześniej. Obiekt a nie zawiera tablicy!!!. Nawet masz to w komunikacie. Zamiast string Item1 {get;set;} itd zrób np te indeksery

0
szydlak napisał(a):

Odpowiedź jest kilka postów wcześniej. Obiekt a nie zawiera tablicy!!!. Nawet masz to w komunikacie. Zamiast string Item1 {get;set;} itd zrób np te indeksery

dobra, dzieki za pomoc ;)

1
class ChampionsChosen
    {
        public string Photo { get; set; }
        public string Name { get; set; }
        public string Traits1 { get; set; }
        public string Traits2 { get; set; }
        public string Traits3 { get; set; }
       public string[] Tab {get;set;} =new string[6];

    }

Nie jest to idealnie ale najszybciej

0
szydlak napisał(a):
class ChampionsChosen
    {
        public string Photo { get; set; }
        public string Name { get; set; }
        public string Traits1 { get; set; }
        public string Traits2 { get; set; }
        public string Traits3 { get; set; }
       public string[] Tab {get;set;} =new string[6];

    }

Nie jest to idealnie ale najszybciej

Wielkie dzięki, działa tak jak chciałem ;)

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