C# 查找存储在数组C中的一组结果的最小值#
我的程序有文本框和列表视图,在文本框中键入信息,然后单击按钮显示在列表视图中。信息包括身份证、名字、姓氏和年薪。信息存储在数组中 我想找薪水最低的人。我该怎么做呢?(用C#表示) 这是我的表格1:C# 查找存储在数组C中的一组结果的最小值#,c#,arrays,visual-studio-2010,class,C#,Arrays,Visual Studio 2010,Class,我的程序有文本框和列表视图,在文本框中键入信息,然后单击按钮显示在列表视图中。信息包括身份证、名字、姓氏和年薪。信息存储在数组中 我想找薪水最低的人。我该怎么做呢?(用C#表示) 这是我的表格1: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using Sys
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
namespace Employee_Program
{
public partial class Form1 : Form
{
public Form1()
{
em = new ArrayList();
InitializeComponent();
}
public ArrayList em = new ArrayList();
private void show_employee()
{
listView1.Items.Clear();
foreach(Employee a in em)
{
int i = listView1.Items.Count;
listView1.Items.Add(a.EmployeeId.ToString());
listView1.Items[i].SubItems.Add(a.FirstName);
listView1.Items[i].SubItems.Add(a.LastName);
listView1.Items[i].SubItems.Add(a.YearSalary.ToString());
}
}
private void button1_Click(object sender, EventArgs e)
{
Employee a = new Employee();
a.EmployeeId = float.Parse(employeeId.Text);
a.FirstName = firstName.Text;
a.LastName = lastName.Text;
a.YearSalary = float.Parse(yearSalary.Text);
em.Add(a);
show_employee();
}
private void button2_Click(object sender, EventArgs e)
{
// this is the button that will return the lowest salary value. Preferably in a
//message box? Any idea?
}
}}
这是我的班级,员工:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Employee_Program
{
class Employee
{
protected float employeeId;
protected string firstName;
protected string lastName;
protected float yearSalary;
// first constructor
public Employee()
{
employeeId = 0;
firstName = "";
lastName = "";
yearSalary = 0;
}
// second constructor
public Employee(float EmployeeId, string FirstName,
string LastName, float YearSalary)
{
employeeId = EmployeeId;
firstName = FirstName;
lastName = LastName;
yearSalary = YearSalary;
}
public float EmployeeId
{
get
{
return employeeId;
}
set
{
employeeId = value;
}
}
public string FirstName
{
get
{
return firstName;
}
set
{
firstName = value;
}
}
public string LastName
{
get
{
return lastName;
}
set
{
lastName = value;
}
}
public float YearSalary
{
get
{
return yearSalary;
}
set
{
yearSalary = value;
}
}
}
}
注意:一定要包括:
using System.Linq;
可以使用LINQ表达式,例如:
Employee[] employees;
//Populate employees
var min = (from e in employees select e.YearSalary).Min();
注意:一定要包括:
using System.Linq;
可以使用LINQ表达式,例如:
Employee[] employees;
//Populate employees
var min = (from e in employees select e.YearSalary).Min();
研究使用
MinBy
扩展方法。它明显缺乏Linq。可以找到一个实现
然后你只需:
Employee aCheapEmployee = employees.MinBy(e => e.Salary);
如果您需要查找所有薪酬最低的员工:
var minSalary = employees.Min(e => e.Salary);
IEnumerable<Employee> slaveLabourers = employees.Where(e => e.Salary==minSalary);
var minSalary=employees.Min(e=>e.Salary);
IEnumerable slaveLabourers=雇员,其中(e=>e.Salary==minSalary);
研究使用MinBy
扩展方法。它明显缺乏Linq。可以找到一个实现
然后你只需:
Employee aCheapEmployee = employees.MinBy(e => e.Salary);
如果您需要查找所有薪酬最低的员工:
var minSalary = employees.Min(e => e.Salary);
IEnumerable<Employee> slaveLabourers = employees.Where(e => e.Salary==minSalary);
var minSalary=employees.Min(e=>e.Salary);
IEnumerable slaveLabourers=雇员,其中(e=>e.Salary==minSalary);
有一个MinBy方法。如果你不想使用MinBy,有几种方法。我建议采取这种办法:
// Don't use an ArrayList, use a List<Employee>
Employee minEmp = employees.Aggregate(float.MinValue, (min, e) => (e.YearSalary < min.YearSalary) ? e : min);
有一个MinBy方法。如果你不想使用MinBy,有几种方法。我建议采取这种办法:
// Don't use an ArrayList, use a List<Employee>
Employee minEmp = employees.Aggregate(float.MinValue, (min, e) => (e.YearSalary < min.YearSalary) ? e : min);
考虑重构代码
- 您可以使用以避免初始化重复
- 你可以用 非常奇怪,你使用浮点作为ID。考虑使用一些类似INT/LI>的东西。
- 通常用于参数命名
- 考虑对薪资使用十进制类型
public class Employee
{
public Employee()
: this(0, "", "", 0)
{
}
public Employee(int employeeId, string firstName,
string lastName, decimal yearSalary)
{
EmployeeId = employeeId;
FirstName = firstName;
LastName = lastName;
YearSalary = yearSalary;
}
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set;}
public decimal YearSalary { get; set; }
}
- 考虑对数值输入使用NumericUpDown控件
- 考虑对控件使用描述性名称
- 考虑将新员工添加到listView的末尾,而不是重新加载所有员工
- 考虑对员工集合使用通用列表
- 通常用于方法命名
private List<Employee> employees = new List<Employee>();
private void ShowEmployee(Employee employee)
{
var item = employeeListView.Items.Add(employee.EmployeeId.ToString());
item.SubItems.Add(employee.FirstName);
item.SubItems.Add(employee.LastName);
item.SubItems.Add(employee.YearSalary.ToString());
}
private void AddEmployeeButton_Click(object sender, EventArgs e)
{
Employee employee = new Employee();
employee.EmployeeId = (int)idNumericUpDown.Value;
employee.FirstName = firstNameTextBox.Text;
employee.LastName = lastNameTextBox.Text;
employee.YearSalary = salaryNumericUpDown.Value;
employees.Add(employee);
ShowEmployee(employee);
}
private void LowestSalaryButton_Click(object sender, EventArgs e)
{
decimal minSalary = employees.Min(em => em.YearSalary);
MessageBox.Show(minSalary.ToString("C"), "Min salary");
}
private List employees=new List();
私有void ShowEmployee(员工)
{
var item=employeeListView.Items.Add(employee.EmployeeId.ToString());
item.SubItems.Add(employee.FirstName);
item.SubItems.Add(employee.LastName);
item.SubItems.Add(employee.yearlary.ToString());
}
私有无效AddEmployeeButton_单击(对象发送者,事件参数e)
{
员工=新员工();
employee.EmployeeId=(int)idNumericUpDown.Value;
employee.FirstName=firstNameTextBox.Text;
employee.LastName=lastNameTextBox.Text;
employee.yearlary=salaryNumericUpDown.Value;
employees.Add(employees);
ShowEmployee(员工);
}
private void LowestSalaryButton\u单击(对象发送者,事件参数e)
{
十进制最小工资=employees.Min(em=>em.YearSalary);
MessageBox.Show(minSalary.ToString(“C”),“minSalary”);
}
考虑重构代码
- 您可以使用以避免初始化重复
- 你可以用 非常奇怪,你使用浮点作为ID。考虑使用一些类似INT/LI>的东西。
- 通常用于参数命名
- 考虑对薪资使用十进制类型
public class Employee
{
public Employee()
: this(0, "", "", 0)
{
}
public Employee(int employeeId, string firstName,
string lastName, decimal yearSalary)
{
EmployeeId = employeeId;
FirstName = firstName;
LastName = lastName;
YearSalary = yearSalary;
}
public int EmployeeId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set;}
public decimal YearSalary { get; set; }
}
- 考虑对数值输入使用NumericUpDown控件
- 考虑对控件使用描述性名称
- 考虑将新员工添加到listView的末尾,而不是重新加载所有员工
- 考虑对员工集合使用通用列表
- 通常用于方法命名
private List<Employee> employees = new List<Employee>();
private void ShowEmployee(Employee employee)
{
var item = employeeListView.Items.Add(employee.EmployeeId.ToString());
item.SubItems.Add(employee.FirstName);
item.SubItems.Add(employee.LastName);
item.SubItems.Add(employee.YearSalary.ToString());
}
private void AddEmployeeButton_Click(object sender, EventArgs e)
{
Employee employee = new Employee();
employee.EmployeeId = (int)idNumericUpDown.Value;
employee.FirstName = firstNameTextBox.Text;
employee.LastName = lastNameTextBox.Text;
employee.YearSalary = salaryNumericUpDown.Value;
employees.Add(employee);
ShowEmployee(employee);
}
private void LowestSalaryButton_Click(object sender, EventArgs e)
{
decimal minSalary = employees.Min(em => em.YearSalary);
MessageBox.Show(minSalary.ToString("C"), "Min salary");
}
private List employees=new List();
私有void ShowEmployee(员工)
{
var item=employeeListView.Items.Add(employee.EmployeeId.ToString());
item.SubItems.Add(employee.FirstName);
item.SubItems.Add(employee.LastName);
item.SubItems.Add(employee.yearlary.ToString());
}
私有无效AddEmployeeButton_单击(对象发送者,事件参数e)
{
员工=新员工();
employee.EmployeeId=(int)idNumericUpDown.Value;
employee.FirstName=firstNameTextBox.Text;
employee.LastName=lastNameTextBox.Text;
employee.yearlary=salaryNumericUpDown.Value;
employees.Add(employees);
ShowEmployee(员工);
}
private void LowestSalaryButton\u单击(对象发送者,事件参数e)
{
十进制最小工资=employees.Min(em=>em.YearSalary);
MessageBox.Show(minSalary.ToString(“C”),“minSalary”);
}
“我想找到工资最低的人”如果不止一个人的工资最低怎么办?员工对不起,这是指班级员工吗?如果是这样的话,它将不起作用,并且会加下划线。是的,还必须考虑多个最低工资的人,谢谢!也许有用:@user1336868-抱歉,这引用了您的Employee对象数组。上面的链接有一些关于如何实际选择薪资最低的人的详细信息。“我想找到薪资最低的人”如果有多个人薪资最低怎么办?员工抱歉,这是指班级员工吗?如果是这样的话,它将不起作用,并且会加下划线。是的,还必须考虑多个最低工资的人,谢谢!也许有用:@user1336868-抱歉,这引用了您的Employee对象数组。上面的链接有一些关于如何实际选择工资最低的人的细节。这似乎很完美,但我如何让它接受“员工”?我在什么地方声明了吗?“不要使用数组列表
,使用列表
”。ArrayList
是非类型化的,这可能会导致问题和代码气味。我用了员工