Kotlin - data class i opreacja dodawania

0

Stworzyłem data class jak poniżej:

data class WynikiWszystkichSedziow(
    val nazwa_sedziego: String ="",
    val nazwa_zawodnika: String = "",
    val wynik_zawodnika: Int = 0,
)

Jest 3 sędziów i 12 zawodników ( w tym przykładzie )
Zapakowałem ( odczyt z plików) do data class dane w sposób jak poniżej:

 ByteArrayOutputStream().use {
                client.retrieveFile(plik, it)
                val dataSedziowie = String(it.toByteArray())
                val tablicaSedziowie = dataSedziowie.lines() //pobrana tablica z pliku
                println("tablicaSedziowie= " + tablicaSedziowie)
                val rozmiarTablicaSedziowie = (tablicaSedziowie.size - 1)
                println("rozmiarTablicaSedziowie= " + rozmiarTablicaSedziowie)
/// koniec czytania nazw sedziow

                val tablicaSedziaLine: MutableList<WynikiWszystkichSedziow> = mutableListOf() //tablica z wszystkimi wynikami
                var nazwaSedzia: String =""
                var plikSedzia = ""
                var wynik_tablicaSedzia = 0
                var rozmiar_tablicy = 0
               
                for (i in 0..rozmiarTablicaSedziowie - 1) { //petla, w zaleznosci od ilosci sedziow
                    nazwaSedzia = tablicaSedziowie[i] // pobranie kolejnej nazwy sedziego
                    plikSedzia = "kotlin/" + nazwaSedzia + "_calosc.txt"   //link do pliku z wynikami konkretnego sedziego

//odczyt wynikow dla kolejnego sedziego
                    ByteArrayOutputStream().use {
                        client.retrieveFile(plikSedzia, it)
                        val dataSedzia = String(it.toByteArray())
                        val tablicaSedzia  = dataSedzia.lines() //pobrana tablica z pliku


               // przypisywanie wartosci do rekordu: WynikiWszystkichSedziow

                        rozmiar_tablicy = (tablicaSedzia.size - 1)
                        for (numer in 1..rozmiar_tablicy){
                        wynik_tablicaSedzia = tablicaSedzia[numer -1].toInt()//pobranie kolejnego wyniku zawodnika
                            tablicaSedziaLine.add(WynikiWszystkichSedziow(nazwaSedzia,"Z"+numer,wynik_tablicaSedzia))
                        }
                // KONIEC  -  przypisywanie wartosci do rekordu: WynikiWszystkichSedziow

Po println. wygląda to z grubsza tak: ;-)

[WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z1, wynik_zawodnika=36), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z2, wynik_zawodnika=43), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z3, wynik_zawodnika=48), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z4, wynik_zawodnika=40), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z5, wynik_zawodnika=63), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z6, wynik_zawodnika=58), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z7, wynik_zawodnika=32), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z8, wynik_zawodnika=57), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z9, wynik_zawodnika=81), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z10, wynik_zawodnika=12), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z11, wynik_zawodnika=61), WynikiWszystkichSedziow(nazwa_sedziego=Maciek, nazwa_zawodnika=Z12, wynik_zawodnika=44), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z1, wynik_zawodnika=6), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z2, wynik_zawodnika=35), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z3, wynik_zawodnika=21), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z4, wynik_zawodnika=40), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z5, wynik_zawodnika=63), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z6, wynik_zawodnika=58), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z7, wynik_zawodnika=32), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z8, wynik_zawodnika=57), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z9, wynik_zawodnika=81), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z10, wynik_zawodnika=12), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z11, wynik_zawodnika=61), WynikiWszystkichSedziow(nazwa_sedziego=Andrzej, nazwa_zawodnika=Z12, wynik_zawodnika=44), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z1, wynik_zawodnika=1), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z2, wynik_zawodnika=89), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z3, wynik_zawodnika=11), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z4, wynik_zawodnika=40), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z5, wynik_zawodnika=63), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z6, wynik_zawodnika=58), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z7, wynik_zawodnika=32), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z8, wynik_zawodnika=57), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z9, wynik_zawodnika=81), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z10, wynik_zawodnika=12), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z11, wynik_zawodnika=61), WynikiWszystkichSedziow(nazwa_sedziego=Leszek, nazwa_zawodnika=Z12, wynik_zawodnika=44)]


No i w tym miejscu utknąłem. :-)

Potrzebuję wykonać dodawanie w układzie:
Wynik zawodnika 1 = wynik sedziego 1 + wynik sedziego 2 + wynik sedziego 3
Wynik zawodnika 2 = wynik sedziego 1 + wynik sedziego 2 + wynik sedziego 3
itd..

Wyniki lecą po kolei dla każdego zawodnika.
Czyli:
Sedzia 1 = 10, 15, 16 ...
Sedzia 2 = 11, 5, 21...
Sedzia 3 = 13, 95, 88...

Pierwsza wartość odpowiada Zawodnikowi 1, następna drugiemu itd.
Wynik dla Z1 = 10 + 11 + 13
Wynik dla Z2 = 15 + 5 +95
Wynik dla Z3 = 16 + 21 +88

Nie chodzi mi o logikę tylko jak to fizycznie zapisać :-)...chyba już wiem :-)

2

Jeju... Too long, didnt read.

Jezeli o cos pytasz to najlepiej jakbys pokazal minimum kodu, ktory przedstawia problem. Bez calego boilerplate'a naokolo.
Szczegolnie, ze Twoj kod nie jest najlepszej jakosci i po prostu ciezko "kognitywnie" zrozumiec co tam chciales zrobic. No bo OK, ze dla siebie tak piszesz i to rozumiesz ale kiedy chcesz zeby ktos Ci pomogl to taki ktos musi sie niezle wczytac zeby dokopac sie do clue problemu bo kod nie uklada sie w logiczna calosc :)


Dobra ale jakby pominac kod zrodlowy i skupic sie na tym:

Wyniki lecą po kolei dla każdego zawodnika.
Czyli:
Sedzia 1 = 10, 15, 16 ...
Sedzia 2 = 11, 5, 21...
Sedzia 3 = 13, 95, 88...

Pierwsza wartość odpowiada Zawodnikowi 1, następna drugiemu itd.
Wynik dla Z1 = 10 + 11 + 13
Wynik dla Z2 = 15 + 5 +95
Wynik dla Z3 = 16 + 21 +88

val wynikZ1 = sedziowie.map{it[0]}.sum()
val wynikZ2 = sedziowie.map{it[1]}.sum()
val wyniki = (0 until zawodnicy.size()).map { i -> sedziowie.map { it[i] }.sum() }
0

O widzisz, takiego kodu bym sam nie wymyślił. :-)
Super!

Jeju... Too long, didnt read.

Chciałem jak najdokładniej przedstawić problem :-)

1

Pewnie bedziesz musial delikatnie zmodyfikowac na swoje potrzeby bo nie wnikalem jak dokladnie to u Ciebie wyglada. Ale jezeli zrozumiales co tam napisalem to powinies byc w stanie to wykorzystac u siebie.

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