【问题标题】:Populate Dictionary填充字典
【发布时间】:2020-07-26 00:42:16
【问题描述】:

我需要为学校做一个“电影排名”。 语言是 C#

我想用字典,在哪里

  • 键 = 电影名称
  • 值 = 指定的星星。

将它放在一个循环中并要求 5 个输入。代码如下所示:

// Create a dictionary with string key and Int16 value pair  
Dictionary<string, Int16> Ranking = new Dictionary<string, Int16>();
            
for (int i = 1; i < 6; I++)
{
    string MovieName = txbPelicula.Text;
    Int16 Stars = Convert.ToInt16(txbPuntuacion.Text);
    Ranking.Add(MovieName, Stars);

    MessageBox.Show("la lista de películas es " + Ranking);              

}

退出循环后,对字典进行排序并按星数排序打印。

我的头脑很好吗? 我的一些同学使用了 List,但我不明白他们如何将 Movie Name 与它的 Stars 一起加入。

谢谢

【问题讨论】:

  • 如果您需要使用列表,那么您可以有 2 个列表:一个用于存储键,一个用于存储值。然后你可以索引它们,因为你会知道两个键值对将具有相同的索引
  • 您的代码会将相同的电影和评分添加到字典中 5 次。您需要考虑用户将如何输入数据并基于此构建您的字典。
  • 不要使用Convert.ToInt16。请改用Int16.TryParse - 否则如果有人输入非数字值并让您的程序区分0 和无效输入,您的程序可能会崩溃。
  • 您还需要检查指定的电影名称是否已经在字典中,否则.Add调用中的重复键会导致崩溃。
  • 还在 Dictionary 构造函数调用中使用不区分大小写的字符串比较,否则您将有重复的“拯救私人瑞恩”和“拯救私人瑞恩”,例如 - 但是你'将需要构建一个适当的反规范化器,以便“拯救 pvt ryan”或“拯救私人 ryan (1998)”也引用相同的条目。

标签: c# dictionary


【解决方案1】:

我会使用电影列表 classesstructures。 Movie 类需要包含电影的名称及其评级。

class Movie
{
    public string Name { get; }
    public int Rating { get; set; }

    public Movie(string name, int rating)
    {
        Name = name;
        Rating = rating;
    }
}
Movie movie = new Movie("Bad movie", 1);
var name = movie.Name;
var rating = movie.Rating;
var movies = new List<Movie>();

//...

foreach (Movie movie in movies.OrderBy(movie => movie.Rating))
{
    Console.WriteLine("{0}: {1}", movie.Name, movie.Rating);
}

【讨论】:

  • 请阅读问题,看看 OP 在问什么。
  • @Enigmativity 这正是我所做的。 “我头脑清楚吗?我的一些同学使用了一个列表,但我不明白他们将如何加入电影名称和它的明星。”我给了他们一个适用于列表的解决方案,他们不知道同学们会如何工作,并由此提出了一种替代方法,而不是 OP 认为最好的方法。
  • @Enigmativity The XY problem
  • 我真的觉得这个问题是关于从(大概)Windows 窗体应用程序中获取用户输入并以某种形式的列表显示结果。您已跳转到控制台应用程序并忽略了用户输入。一本字典对 OP 来说效果很好。
  • @Enigmativity 我跳到了控制台应用程序?如何?我的答案的主要部分是使用类列表而不是字典。因为我使用Console.WriteLine 而不是MessageBox.Show(_:)?即使 OP 在 Windows Forms 环境中工作,问题中也没有要求,而且我的解决方案不是控制台应用程序独有的。没有任何对 Windows 窗体代码的请求。
猜你喜欢
  • 1970-01-01
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 2013-04-28
  • 1970-01-01
  • 2013-02-25
  • 2019-03-06
相关资源
最近更新 更多