gpt4 book ai didi

c# - 如何对拆分数组进行排序以从最高到最低读取?

转载 作者:太空宇宙 更新时间:2023-11-03 20:01:46 24 4
gpt4 key购买 nike

我需要一点帮助来将拆分数组按从高到低的顺序排序,同时将名称保持在分数旁边。我有点不确定该怎么做,因为数组是拆分的。另外,有没有一种方法可以让用户输入任意数量的姓名和分数,而不会出现程序出错的情况?那么如果他们只想输入 4 个名字和分数,他们所要做的就是按回车键?

这是我目前的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace proj09LEA
{
class Program
{
static void Main(string[] args)
{
// declare and array of integers
string[] name = new string[5];
int[] score = new int[5];

Console.WriteLine("\nSaturday Coder's Bowling Team");
Console.WriteLine("Enter in a name and score for each person on the team.");
Console.WriteLine("For example, Mary 143. Just hit Enter when you are done.\n");

// fill an array with user input
for (int i = 0; i < score.Length; i++)
{
Console.WriteLine("Enter in a name and score: ");
string line = Console.ReadLine();

name[i] = line.Substring(0, line.IndexOf(' '));
score[i] = int.Parse(line.Substring(line.IndexOf(' ') + 1));
}

Console.WriteLine("------------ Input Complete ------------\n");
Console.WriteLine("Here are the scores for this game, from highest to lowest:\n");

for (int i = 0; i < score.Length; i++)
{
if (score[i] >= 300)
{
Console.WriteLine("{0}'s score was {1}*.", name[i], score[i]);
}
else
{
Console.WriteLine("{0}'s score was {1}.", name[i], score[i]);
}
}

AverageScore(score);

Console.WriteLine("Press Enter to continue. . .");
Console.ReadLine();
}

static void AverageScore(int[] score)
{
int sum = score.Sum();
int average = sum / score.Length;
Console.WriteLine("The average score for this game was {0:d}.\n", average);
}
}
}

最佳答案

让我先解决无限玩家问题。如您所知,数组的大小在创建时是固定的。不过,有一种数据结构 List 可以包含无限数量的(嗯,实际上)元素。你可以这样创建一个:

List<string> names = new List<string>();

然后如果你想添加一个新的名字,你可以,例如,使用

names.Add("Mary");

您的其余代码应该大致相同;索引正常工作,求和正常工作,等等。


现在如何将它们一起排序?好吧,您真的没有姓名列表和分数列表;从语义上讲,您真正拥有的是姓名和分数对的列表,或球员列表。您可以先定义一个代表玩家的结构:

struct Player {
public string Name { get; set; }
public int Score { get; set; }

public Player(string name, int score) {
Name = name;
Score = score;
}
}

然后你就可以有一个玩家列表:

List<Player> players = new List<Player>();

我们不是分别添加名称和分数,而是将它们加在一起:

string name = /* ... */;
int score = /* ... */;
players.Add(new Player(name, score));

这样表示,您的打印例程也变得更简单了。您可以同时遍历两者:

foreach(Player player in players) {
Console.WriteLine("{0} scored {1}", player.Name, player.Score);
}

最后,求和有点棘手,但并不难。基本上,我们提取所有分数并对它们求和:

int sum = players.Select((player) => player.Score).Sum();

但对您来说,真正的好处是最终能够对其进行排序:

players.Sort((x, y) => y.Score - x.Score);

关于c# - 如何对拆分数组进行排序以从最高到最低读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27349360/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com