Jak do funckji przekazać fragment tablicy?

0

Witam,

Napisałem sobie taką metodę:

        private Byte Product(Byte[] vector1, Byte[] vector2)
        {
            Byte result = 0;

            result ^= Mul(vector1[0], vector2[0]);
            result ^= Mul(vector1[1], vector2[1]);
            result ^= Mul(vector1[2], vector2[2]);
            result ^= Mul(vector1[3], vector2[3]);

            return result;
        }

W miejscu jej wywołania chciałbym przekazać do niej tylko fragment pewnej innej tablicy:

...
Byte[] test = new Byte[100];

this.Product(test+1, test+50); //tutaj chciałbym przekazać "wskaźnik" na fragment tablicy

Istnieje jakiś sposób w C# żeby to funkcjonowało?

Dziękuję i pozdrawiam,
HIOB.

1

Chyba niezbyt ładnie, ale taka jest moja pierwsza myśl, w sumie nie wiem czemu nie przekażesz całej i odpowiednio nie ustawisz pętli, no ale to już tylko i wyłącznie Twoja sprawa :)

this.Product(test.Take(50).ToArray(), test.Skip(50).Take(50).ToArray());
0
private Byte Product(Byte[] vector1, Byte[] vector2)
        {
            Byte result = 0;
 
            result ^= Mul(vector1[0], vector2[0]);
            result ^= Mul(vector1[1], vector2[1]);
            result ^= Mul(vector1[2], vector2[2]);
            result ^= Mul(vector1[3], vector2[3]);
 
            return result;
        }

A gdzie wymuszasz, by te tablice miały dokładnie 4 elementy?

1

"Emfałsi" - a skąd wiząłeś metody "Take" i "Skip" - gdyby mi to działało, to właśnie o takie coś mi chodziło :)
"Azarien" - to tylko przykładowa metoda -> chodzi mi o to, żeby przekazać do metody fragment tablicy (np. od komórki 10 do końca).

Edit.

Już mam, trzeba dodać bibliotekę "linq".

Dzięuję i pozdrawiam,
HIOB.

1

To nie można przekazać do funkcji indeksy początkowe i końcowe?

 
private byte Product(byte[] tablica, int start, int koniec)

Zabawy z LINQ w tym przypadku, to trochę przerost formy nad treścią.

1

A może po prostu potworzyć klasy czy struktury odpowiednie, a nie tak operować na „żywych tablicach” bez kontroli rozmiarów, indeksów itp.

Jakoś nigdy nie mam potrzeby robić zwykłej tablicy w C#...

2

Jest taka ciekawa struktura, niestety dość zaniedbana na początku przez co trochę zmarnowano jej potencjał, jak ArraySegment<T> (trochę poprawiona w .NET 4.0), ale mimo wszystko się nada:
http://msdn.microsoft.com/en-us/library/1hsbd92d.aspx

Poza tym, dość uniwersalnym sposobem jest przekazywanie IEnumerable<T>. W (znowu) .NET 4.0 jest nawet ładna funkcyjna funkcja Enumerable.ZipWith, przez co twój kod redukuje się do jednej linijki w ten sposób.

0

Witam,

"somekind" - mógłbym przekazywać indeksy, ale jak np. mam trzy tablice, to robi się to strasznie niewygodne.
"Azarien" - no ja zazwyczaj też nie mam, ale w tym konkretnym przypadku nie widzę innej możliwości.
"MSM" - dokładnie o coś takiego mi chodziło, póki co wykorzystałem sposób "emfałsi".

Bardzo dziękuję raz jeszcze za wszystkie odpowiedzi.
Pozdrawiam, HIOB.

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