组织数组中的值,但保持项目“配对”

时间:2013-11-24 02:17:28

标签: c# arrays

因此,对于我的家庭作业,我需要编写一种程序,其中用户键入人名,然后是他们的分数。然后需要找到最高,最低和平均分数并列出获得每个分数的玩家。

static void Main()
{
    string userInput;

    Console.Write("Please enter bowler's first name and then a score then use a comma to seperate plays\nExample: Elliott 200,John 180,Jane 193\nPlease enter values here: ");
    userInput = Console.ReadLine();
    char[] delimiters = new char[] { ' ', ','};
    string[] parts = userInput.Split(delimiters);

    for (int i = 0; i < parts.Length; i++)
    {
    Console.WriteLine(parts[i]);
    }

    Console.ReadLine();

}//End Main()

正如您所看到的,我已经弄清楚如何分割输入,但我不知道如何组织它们并将它们配对。我一直在网上寻找答案并听说过清单,但我从未使用它们。这甚至可能在阵列上?我是否需要在两个不同的阵列上执行此操作?

我也试过分成两个数组,但它有一个转换问题

    string userInput;
    const int ZERO = 0;
    const int ONE = 1;
    const int TEN = 10;
    string[] parsedInput = new string[TEN];
    string[] name = new string[TEN];
    int[] score = new int[TEN];


    for (int i = 0; i < TEN; ++i)
    {
        Console.Write("Please enter bowler's first name and then a score\nExample: Name 200\nPlease enter values here: ", i);
        userInput = Console.ReadLine();
        parsedInput = userInput.Split();
        name = parsedInput[ZERO];
        score = int.Parse(parsedInput[ONE]);
    }

2 个答案:

答案 0 :(得分:1)

当你说你不知道如何将它们配对时,这就是一个课程的目的。

public class Person
{
    public string Name { get; set; }
    public int Score { get; set; }
}

一旦你有了这个,你就是在使用List而不是数组的正确轨道上(不是你不能使用数组,但这将是首选的方式)

List<Person> people = new List<Person>();

然后,您可以使用循环浏览列表并访问属性。

foreach(Person person in people)
{
    Console.WriteLine(person.Name + ", " + person.Score.ToString());
}

发布的其他答案很好,但是如果你刚刚学习的话,你应该首先关注这样的事情。

答案 1 :(得分:0)

你绝对可以使用简单的字符串数组来做到这一点。但是我不打算给你这样的代码。你肯定应该花更多的时间来学习类,数组,列表,循环等。除非你自己做,否则你不会学到任何东西。

只是为了告诉你,当你知道你正在使用的语言时它是如何完成的:LINQ one-liner获取匿名类型对象的列表,按值降序排序:

var items = input.Split(',')
                 .Select(x => x.Split(' '))
                 .Select(x => new { name = x[0], value = int.Parse(x[1]) })
                 .OrderByDescending(x => x.value)
                 .ToList();

从名单中选择你需要的东西:

// min/max are items, so both .name and .value are there
var maxItem = items.First();
var minItem = items.Last();

// average is just a number
var average = items.Average(x => (double)x.value);