[ cure126 @ 22.06.2016. 20:38 ] @
Zna li neko neki ELEGANTAN način da se izvuče željeni red iz 2D niza u 1D niz u C# ? Otprilike mi treba ovo kao na slici



Znači NE preko For petlji!

Unapred se zna dimenzija matrice i elementi moraju biti tipa object.
[ mmix @ 23.06.2016. 10:02 ] @
Koju tranformaciju koristis?

Tehnicki mozes da koristis LINQ za takve stvari, ali LINQ ti je u osnovi set glorifikovanih for operacija Ne vidim kako mozes da iteriras preko bilo cega bez petlji?
[ mmix @ 23.06.2016. 10:55 ] @
Ovaj kod ce ti npr izvuci sve kolone iz matrice i sumirati njihove elemente, mozes to da adaptiras na svoj primer


Code (csharp):

var inputArray = new int[,] { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 },
{ 21, 22, 23, 24, 25 }, { 26, 27, 28, 29, 30 } };

inputArray.Dump();

var l = (from el in inputArray.Cast<int>().Select((e, i) => new { e, c = i % inputArray.GetLength(1) })
          group el by el.c into groups
          select groups.Sum(g => g.e)).ToArray();
         
l.Dump();
 


[ ravni @ 23.06.2016. 12:35 ] @
A mozda je trivijalno?
Code:
outputRange = inputArray[nekiIndex];
[ cure126 @ 23.06.2016. 12:46 ] @
Pa zapravo fora je sto prvo citam Excel.Range is excela i njega mogu direktno da smestim u neki object[,] inputArray, sad ne znam da li mogu kao sto Ravni kaze direktno daj array da smestim u 1D array, mislim da ne moze. I sto ne moze object da se casta u string.
[ Mihajlo Cvetanović @ 23.06.2016. 13:49 ] @
Postoji nekoliko načina, pomoću Buffer.BlockCopy, ili pomoću LINQ, ili nova funkcija koja radi šta treba pomoću for petlje:

http://stackoverflow.com/quest...-of-a-double-rectangular-array
[ cure126 @ 23.06.2016. 14:41 ] @
Sa Buffer.BlockCopy moze ako je u matrici int ili double ili char, znaci neki prost tip podataka za koji znas koliko mesta zauzima. To mi ne radi za Object. For ne dolazi u obzir kao sto rekoh... :)
[ Shadowed @ 23.06.2016. 14:44 ] @
A mora li biti 2D niz? Ako mozes da koristis niz nizova ([][] format umesto [,]), onda je lako, samo navedes index reda i dobijas niz koji sadrzi elemente u tom redu.
[ cure126 @ 23.06.2016. 14:55 ] @
Moze object[][] ako mozes range iz excela da prebacis u takav niz. Kolko videh u nekom primeru na netu lik je uradio nesto tipa

Code:

Excel.Range range = .... ;
object[][] inputArray = ((object[][])range).value;


al to kod mene nije radilo, nego pucalo.

Radi dobro samo:
Code:

object[,] inputArray = range.value;
[ Mihajlo Cvetanović @ 23.06.2016. 15:16 ] @
Prvo i osnovno pitanje je zašto for petlja ne dolazi u obzir? Koji je razlog?

Drugo, pošto već radiš sa Excel.Range objektom možda možeš da pozoveš neku Excel funkciju nad tim objektom koja upravo radi to što ti treba?
[ dusans @ 23.06.2016. 15:19 ] @
Nije moguće napraviti to što hoćeš bez iteracija.
Iteracije možeš dobiti na razne načine, petljama, rekurzijom, ...
Tako da je tvoj zahtev da se ne koriste petlje čudan i besmislen.


[ cure126 @ 23.06.2016. 21:46 ] @
Napravljeno je bez, sutra ću ako stignem postovati rešenje. Ne može sa iteracijama jer je to sporo za ono što meni treba. Ali hvala na idejama! :)