Loading...
Joro_Paspalev avatar Joro_Paspalev 23 Точки

Как мога да отделя всеки елемент от масив в отделна променлива в C#?

Здравейте, колеги,

Как мога да отделя всеки елемент от масив в отделна променлива?

Пример: Ако имам int масив с 5 елемента, като този:

int[] intArr = { 12, 23, 467, 200, 9 };

            int currentNumber = 0;

            for (int i = 0; i < intArr.Length; i++)
            {
                currentNumber = intArr[i];
            }

            Console.WriteLine(currentNumber);

то променливата currentNumber ще ми запази само последната стойност на масива т.е. = 9;

Има ли начин да извлека стойностите в 5 различни променливи автоматично, например:

currentNumber1 = 12;

currentNumber2=23;

currentNumber3=467;

currentNumber4=200;

currentNumber5=9;

с нещо от сорта на currentNumber[i] = intArr[i], но пременливите на всяка итерация да се създават сами?

 

 

Тагове:
IvaPanteleeva avatar IvaPanteleeva 5 Точки

Защо ти е да го правиш? 

2
Joro_Paspalev avatar Joro_Paspalev 23 Точки

Здравейте,

искам да се извиня първо на всички, които са коментирали по-долу, за глупавия си въпрос, но тогава когато го написах ( 2 дни преди лекцията за масиви) нямах никаква представа как работи масива, как се задават неговите стойности, как се достъпват, променят и т.н.

Та тогава единственото, което измислих (понеже незнаех за arr[i] че извлича стойността на елемента, който искам) беше ръчно да си задавам променливи според броя на елементите вътре в масива и пак ръчно да им присвоявам стойности.

И за да не го правя това, попитах дали няма някакъв начин това да става автоматично.

Както виждам има и това е достъпване по индексация, което предполагам за по-напредналите е нещо стандартно и го правят с лекота поради факта, че се изпозлва ежедневно и многократно, но тогава голямо чудене падна от моя страна как да ги извлека тези променливи :)

Поздрави на всички, които са оставили коментар.

0
nsavov avatar nsavov 68 Точки

Мисля си че не може... Все пак ще ми е интересно по-запознатите какво ще кажат.

Work-around е да си ги боднеш всички стойности в един голям стринг (с разделители). И след като променяш каквото променяш по първоначалния си масив, да си създадеш нов масив и да парснеш стринга.

0
slavek avatar slavek 51 Точки

Стоях, гледах умно известно време и не можах да се сетя как да го направиш! Но от друга страна, наистина за какво ти е да го правиш? Какъв проблем искаш да решиш? Не бъркаш ли някъде в логиката на решението?

0
mirchev1977 avatar mirchev1977 6 Точки

Здравей, колега!

Каква е идеята с това извличане?

Масивът с индекс intArr[i] си е де факто една най-обикновена скаларна (с единична стойност) променлива. Примерно:

intArr[0] + 5 == 17

, също както ако би казалследното:

currentNumber = intArr[0];
currentNumber + 5 == 17

.

1
BalioFVFX avatar BalioFVFX 40 Точки

Не мисля, че това е възможно. Единствения начин за който се сещам е да инициализираш променливите и да им задаваш стойност ръчно (без цикъли), но това изобщо не е практично и тотално премахва смисъла на масивите.

1
VasilKotsev avatar VasilKotsev 830 Точки

Няма как да се случи това. C# е типизиран език от високо ниво, който при компилиране се свежда до IL (междинен език), който се интерпретира от CLR-a и се компилира (JIT) до машинен код. Друг е въпроса защо ще ти е да правиш подобна глупост, най-вероятно това което искаш да направиш има много по-оптимален начин за имплементация. С Reflection може да се постигне нещо подобно - създаване на инстанция на обект runtime примерно, но това е далеч от твоя въпрос. 

Общо взето имаш индексатори върху колекцията, ползваш си ги тях. Не може и няма смисъл runtime да искаш да ти се създават променливи при положение, че работиш с вече компилиран код, който се свежда до ниво инструкции, а не с чист C# код. 

1
30/05/2019 14:02:48
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

по принцип това е запазено за js python.. 

но за момента в с# няма как те вкараха в с# 8 destructor-и подобни на js но трябва ад видиш в документацията какво правеха. По спомен с масиви май не бачкаха но може да има нещо там. За друго не се сещам.

А и реално  не виждам и причина да правиш такива неща. Ако ти трябва отделно число ще си го намериш. С рефлектион не съм сигурен че ще можеш да ги извадиш а и да успееш overhead-a ще е толкова голям че не си струва.

1
kolioi avatar kolioi 641 Точки
пременливите на всяка итерация да се създават сами?

Променливите в една програма никога не се създават сами smiley Трябва ти да ги създадеш (декларираш), а след това да им присвоиш стойност (инициализираш). В C/C++ има едно нещо наречено union, което съхранява различни типове данни в една и съща памет. Това значи, че една променлива (в твоя случай масив от 5 числа от тип int) може да се интерпретира като 5 различни променливи (също int). Нещо подобно има и в някои по-екзотични езици като Rust, F# и т.н. обаче C# няма такива работи. 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.