Предаване на стойност по референция/променлива
Здрасти, банда!
Имам леко неразбиране на това как обекти си предават стойности м/у отделните методи. Доколкото разбирам от лекторите, масивите и списъците са референтни типове данни. Аз това го разбирам - не е нужно да използваш ref, за да прехвърлиш стойност м/у два и повече метода. Може да не съм го разбрал правилно, защото от кода долу очаквах bigger да си вземе коректно стойността. Оказа се, че, ако ref липсва, каквото и да правя bigger си взима по - ниската стойност??? Гледах го с дебъгера и реших проблема, като му казах, че е референция. Някой ще може ли да ми обясни защо работи така, тъй като не знам как да си формулирам въпроса към д-р Google?
using System;
using System.Collections.Generic;
using System.Linq;
namespace FUCKING_LISTS_Lab
{
class Program
{
static List<int> ListLengthChecker(ref List<int> bigger, ref List<int> smaller, ref List<int> temp)
{
if (smaller.Count > bigger.Count)
{
temp = bigger;
bigger = smaller;
smaller = temp;
return bigger;
}
else
{
return bigger;
}
}
static void Main(string[] args)
{
List<int> smaller = Console.ReadLine().Split().Select(int.Parse).ToList();
List<int> bigger = Console.ReadLine().Split().Select(int.Parse).ToList();
List<int> temp = new List<int>();
ListLengthChecker(ref bigger, ref smaller, ref temp);
for (int i = 0; i < smaller.Count; i++)
{
bigger.Add(smaller[i]);
}
for (int i = 0; i < bigger.Count; i++)
{
Console.Write(bigger[i] + " ");
}
}
}
}
Аз мисля, че вече ми помогнахте. Създавам празен лист, но после не му присвоявам нищо и той си озтава така, а през цялото време работя с оригиналните колекции - тъпо. Това исках да разбера, защо не си присвоявам променливата от метода, който ми върши операциите. Нещо в синтаксиса ми бяга, явно :) Иначе задачата е много проста, просто исках да тренирам методите - 1. Merging Lists от Lists - Lab.
Eто ти едно интересно решение на тази задача... направи следното - маркирай целият фор цикъл и натисни ALT + ENTER - ще ти искочи едно меню...разгледай го ще разбереш какво да правиш - по този начин си тренирай създаването на методи - забележи visual studio как ги създава и след това се пробвай сам
using System;
using System.Linq;
using System.Collections.Generic;
namespace Merging_Lists
{
class Program
{
static void Main(string[] args)
{
List<int> firstList = Console.ReadLine()
.Split()
.Select(int.Parse)
.ToList();
List<int> secondList = Console.ReadLine()
.Split()
.Select(int.Parse)
.ToList();
List<int> rezult = new List<int>();
for (int i = 0; i < Math.Max(firstList.Count, secondList.Count); i++)
{
if(i < firstList.Count)
{
rezult.Add(firstList[i]);
}
if(i < secondList.Count)
{
rezult.Add(secondList[i]);
}
}
Console.WriteLine(string.Join(" ", rezult));
}
}
}
btw, така, както е показано, всеки път във for цикъла ще трябва да изчислява Math.Max, но иначе разбрах :D Много Благодаря!