我正在使用WinForms
。起初我很难将文本框中的数据添加到数组中,但我想出来了,但我不知道这是否是理想的方法。接下来,我要做的是获取数组中最大的数字和数组中除零之外的最小数字。在我的例子中,我键入了2,5,8,7,6 7.对于这个例子,我的目标是得到数字2和7。除了0之外,2是数组中的最小数字,而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);
}
}
}
}
答案 0 :(得分:8)
在了解了您想要的是每次按下按钮时获得一个号码,并且每次您想要计算最小值和最大值我建议:< / p>
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
或在查找Min和Max时检查该项目是否为0
,但我建议您从int[10]
更改为{{1} - 那样你就不会有那些空的物品了。
如果是列表,则每按一次按钮:
List<int>
获得最小和最大:
使用linq:
private void Add_Data_Btn_Click(object sender, EventArgs e)
{
numberList.Add(int.Parse(i_richTextBox1.Text));
}
或者,如果您想在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
答案 1 :(得分:1)
而不是逐个获取数字,您可以一次读取所有数字。并使用Regex和Linq
var numbers = Regex.Matches(i_richTextBox1.Text, @"\d+")
.Cast<Match>()
.Select(m=>int.Parse(m.Value))
.ToArray();
var min = numbers.Min();
var max = numbers.Max();
例如,在文本框中输入2 3 4 61 7 12
..
答案 2 :(得分:1)
由于您希望获得除0
之外的最小值,因此您可以使用:
var min = numArray.Except(new int[] { 0 }).Min();
或
var min = numArray.Where(x => x != 0).Min();
如吉拉德所提到的最大值:
var max = numArray.Max();
如果InvalidOperationException
不包含Sequence contains no elements
的元素,请注意numArray
0
{。}}。