Поняв, что вы хотите, чтобы получить один номер при каждом нажатии кнопки и каждый раз вы хотите, чтобы вычислить Min и Max я предлагаю:
private List<int> _numbers = new List<int>(); // Use List<int> to avoid having irrelevant 0 items
private int _min;
private int _max;
private void Add_Data_Btn_Click(object sender, EventArgs e)
{
//Parse and add new number to collection (notice - this does not take care of invalid input..
var number = int.Parse(i_richTextBox1.Text);
// If it is the first time iterating then this number is both the _min and _max
if(_numbers.Count == 0)
{
_min = number;
_max = number;
}
else
{
//Check if need to update _min or _max
if(number < _min)
_min = number;
else if(number > max)
_max = number;
}
_numbers.Add(number);
}
конечно, вы все еще можете использовать Linq .Min
и Max
операции сбора меди Тион для проверки обновленных значений, но почему делать o(2n)
, когда вы можете 2x o(n)
Ответ перед тем понимание последний комментарий:
Чтобы справиться с 0
проблемой:
Вы можете использовать Linq Except
или проверить, что товар не является 0
, когда lookin g для Min и Max, но я бы предложил перейти от int[10]
к List<int>
. Таким образом у вас не будет этих пустых предметов.
Если это список, то каждый раз при нажатии кнопки:
private void Add_Data_Btn_Click(object sender, EventArgs e)
{
numberList.Add(int.Parse(i_richTextBox1.Text));
}
Получение Мин и Макс:
Использование LINQ:
List<int> numbers = new List<int> {2, 5, 8, 7, 6 7};
var min = numbers.Min();
var max = numbers.Max();
Или, если вы хочу сделать это в o(n)
вместо o(2n)
:
List<int> numbers = new List<int> {2, 5, 8, 7, 6 7};
int min = numbers[0];
int max = numbers[0];
foreach(item in numbers)
{
if(item > max)
max = item;
else if(item < min)
min = item;
}
Изменить способ получения номеров:
Если вы хотите изменить способ получить данные из TextBox
и получить все сразу (вместо одного числа в то время), то использовать string.Split
:
string data = "2 5 8 7 6 7";
var numbers = data.Split(' ')
.Select(int.Parse).ToList();
// Or if you might have more spaces:
string data = "2 5 8 7 6 7";
var numbers = data.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)
.Select(int.Parse).ToList();
Используйте https://msdn.microsoft.com/en-us/library/system.linq.enumerable.min(v=vs.110).aspx и https://msdn.microsoft.com/en-us /library/system.linq.enumerable.max(v=vs.110).aspx – Aybe
Спасибо всем. Я должен практиковать свои массивы и Linq еще немного :) – taji01