|
[ 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! :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|