Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找存储在数组C中的一组结果的最小值#_C#_Arrays_Visual Studio 2010_Class - Fatal编程技术网

C# 查找存储在数组C中的一组结果的最小值#

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

我的程序有文本框和列表视图,在文本框中键入信息,然后单击按钮显示在列表视图中。信息包括身份证、名字、姓氏和年薪。信息存储在数组中

我想找薪水最低的人。我该怎么做呢?(用C#表示)

这是我的表格1:

    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的末尾,而不是重新加载所有员工
  • 考虑对员工集合使用通用列表
  • 通常用于方法命名
以下是Form1代码:

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的末尾,而不是重新加载所有员工
  • 考虑对员工集合使用通用列表
  • 通常用于方法命名
以下是Form1代码:

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
是非类型化的,这可能会导致问题和代码气味。我用了
员工