gpt4 book ai didi

c# - 获取数组中最大和最小的数

转载 作者:行者123 更新时间:2023-11-30 19:15:20 25 4
gpt4 key购买 nike

我正在使用 WinForms。起初我很难将数据从文本框添加到数组,但我想通了,但我不知道这是否是理想的方法。接下来,我要做的是获取数组中除零以外的最大数和最小数。在我的示例中,我输入了 2、5、8、7、6 7。对于这个示例,我的目标是取回数字 2 和 7。 2是数组中除0之外的最小数,7是数组中最大的数

到目前为止我有这个。

private const int MAX_ITEMS = 10;
private int[] numArray = new int[MAX_ITEMS];
private int index = 0;

private void Add_Data_Btn_Click(object sender, EventArgs e)
{
if (this.index < numArray.GetUpperBound(0))
{
int dnum;
if (int.TryParse(i_richTextBox1.Text, out dnum))
{
numArray[this.index++] = dnum;
i_richTextBox1.Text = "";
}

if (Value_Out_Array_CheckBx.Checked == true)
{
foreach (var item in numArray)
{
Console.WriteLine(item);

}
}
}
}

enter image description here

最佳答案

了解您想要的是在每次按下按钮时获得一个数字并且每次您想要计算最小值和最大值后,我建议:

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 .MinMax对集合的操作以检查更新的值,但为什么要执行 o(2n)什么时候可以2x o(n)


在理解最新评论之前回答:

To deal with the 0 problem:

您可以使用 Linq Except或检查该项目不是 0在寻找 Min 和 Max 时,但我只是建议从 int[10] 更改到 List<int> - 这样你就不会拥有那些空项目。

如果它是一个列表,那么每次按下按钮时:

private void Add_Data_Btn_Click(object sender, EventArgs e)
{
numberList.Add(int.Parse(i_richTextBox1.Text));
}

Getting Min and Max:

使用 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;
}

Change way of getting numbers:

如果您想更改从 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();

关于c# - 获取数组中最大和最小的数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40267832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com