获取控制台输入并从最高到最低排序

时间:2017-03-11 21:34:53

标签: c# list sorting

正如标题所说,我想通过控制台从用户那里获取输入,并使用列表或数组对它们进行排序,然后输出列表。

基本上,列表有三个变量,一个字符串和两个整数

(例如: 感染,20,19 约翰,24,3 简,17,28

并且列表应该以相同的格式输出,虽然只是根据第一个数字排序,所以john将是第一个,然后是infexis,然后是jane。名称和第二个数字在排序中无关紧要。)

我对c#真的很陌生,我想知道如何获取用户输入并将其添加到没有指定数量的变量的列表中(因此列表可以包含2个条目,或12个,不只是一个指定的数字。) 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

我强烈建议您引入类而不是字符串数组,您将在其中存储用户的输入。

示例:

public class Person 
{
  public string Name { get; set; }
  public int FirstNumber { get; set; }
  public int SecondNumber { get; set; }
}

public static void Main()
{
  //list of persons
  List<Person> people = new List<Person>();

  //Your piece of business logic ...

  //Creating person object

  var person = new Person();
  person.Name = Console.ReadLine();
  person.FirstNumber = Console.ReadLine();
  person.SecondNumber = Console.ReadLine();
  people.Add(person);

  //order by FirstNumber (needed to add: System.Linq namespace)
  var orderedPeople = people.OrderBy(p => p.FirstNumber);

  //output
  foreach(var p in orderedPeople)
  {
    Console.WriteLine(String.Format("{0} {1} {2}", p.Name, p.FirstNumber, p.SecondNumber));
  }
}

注意:我没有测试此代码,因此您可能会遇到一些编译时错误,但您可以更轻松地了解如何更轻松地处理问题。

此外,您可以扩展您的课程以满足其他要求,例如其他(可选)属性(即用户输入)

答案 1 :(得分:0)

我创建了一个包含您描述的信息类型的类。

class Person
{
    public string Name { get; set; }
    public List<int> Numbers { get; set; }
}

然后,您可以按Numbers的第一个元素进行排序。

    static void Main(string[] args)
    {
        var people = new List<Person>()
        {
            new Person
            {
                Name = "Jeff",
                Numbers = new List<int>{ 1,2,3}
            },
            new Person
            {
                Name = "Sam",
                Numbers = new List<int> { 7 }
            }
        };

        foreach (var person in people.OrderByDescending(x => x.Numbers[0]))
        {
            Console.WriteLine(person.Name);
        }
    }

输出:山姆         杰夫