【问题标题】:C# How to add an element to List<string>?C#如何将元素添加到List<string>?
【发布时间】:2020-05-15 16:29:08
【问题描述】:

如何将元素电影添加到现有的类别元素中?目前我只能在两个字段上创建新的列表条目。

class MovieSolver
    {
        public string Category { get; set; }
        public List<string> Movie { get; set; }
    }
class CreateMovieList
    {
        readonly static List<MovieSolver> playerTargetList = new List<MovieSolver>();

        public static void MovieCBO()
        {
            playerTargetList.Add(new MovieSolver { Category = "Action", Movie = new List<string> { "Taken", "The Factory", "Wind River" } });
            playerTargetList.Add(new MovieSolver { Category = "Comedy", Movie = new List<string> { "Gold", "Hangover", "We are the Millers" } });
            playerTargetList.Add(new MovieSolver { Category = "Thriller", Movie = new List<string> { "Jack Reacher", "Real Steel", "Iron Man I" } });
        }
    }

除了有更聪明的方法来创建class MovieSolver吗?

【问题讨论】:

  • 我认为你的标题应该是List&lt;string&gt;List&lt;List&lt;int&gt;&gt; 来自哪里。你所说的“更聪明”是什么意思?
  • 只是不确定我的做法是否正确,因为我必须循环两次才能访问列表。
  • public Dictionary&lt;string,List&lt;string&gt;&gt; playerTargetList;
  • 三个步骤 1) 创建顶级元素: List> numbers = new List>; 2) 创建一维列表: List number = new List() { 1,2,3,4,5}; 3) 将一维列表添加到二维列表 numbers.Add(number);

标签: c# list add


【解决方案1】:

首先,我在这里根本找不到 int 列表。

如果您想在 MoveiSolver 对象的 List 中添加新的字符串对象,您首先需要找到 Moviesolver 对象,然后才能添加新的字符串元素。

您可以使用 for 循环、foreach 循环或 LINQ 执行此操作。

foreach 对于新手程序员来说通常是最容易理解的。

Foreach item in playerTargetList
{
 if(item.category == "Action")
 {
  item.Movie.add("lorum ipsum");
 }
}

【讨论】:

  • 感谢您的精彩和正确的解释,它的工作完美:)
【解决方案2】:

您可以将方法 addMovie 添加到类 CreateMovieList 中,以验证 MovieSolver 是否尚不存在并在必要时创建它

public static void addMovie(String category, String movie) 
{
    var movieSolver = playerTargetList.Find(e => e.Category == category);
    if(movieSolver != null) 
    {
        var existingMovie = movieSolver.Movie.Find( e => e == movie);
        if (existingMovie == null)
            movieSolver.Movie.Add(movie);
    }
    else
        playerTargetList.Add(new MovieSolver  { Category = category, Movie = new List<string> { movie } }); 
}

【讨论】:

  • 正是我根据@saratcsss 的输入完成的。 addMovie 使用 Dictionary 解决方案。感谢支持
【解决方案3】:

为什么不在这里使用像Dictionary&lt;string, List&lt;string&gt;&gt; 这样的默认类?

//Add library reference
using System.Collections.Generic;

public void MyMethod()
{
    //Initialize a Dictionary
    Dictionary<string, List<string>> MovieCBO = new Dictionary<string, List<string>>();
    //Check if its an existing category
    //If its an existing category, add the movie to existing list
    if (MovieCBO.ContainsKey("some_category"))
    {
        MovieCBO["some_category"].Add("new_movie_name");
    }
    //If its a new category, add category along the movie
    else
    {
        MovieCBO.Add("some_category", new List<string>() { "new_movie_name" });
    }
}

所有操作都将在恒定时间内完成。这比遍历列表中的所有项目并检查类别要快得多。

【讨论】:

  • 我目前正在尝试实施您的解决方案,但我没有得到任何输出,也没有错误。我认为与 if (MovieCBO.ContainsKey("some_category")) 有关。如果 if 语句不应该链接到 playerTargetList 这实际上是我目前试图使代码工作的内容......我只能接受一个答案。只要你上面的代码工作,我就会给你打勾。
  • 您声明的字典名称是什么? if (.ContainsKey("key_value")) 应该被使用。
  • 我使用了你的声明Dictionary&lt;string, List&lt;string&gt;&gt; MovieCBO = new Dictionary&lt;string, List&lt;string&gt;&gt;();
  • 据我了解的逻辑,如果一个类别存在,它将只添加电影,否则类别和电影..​​....代码在我最初的帖子中完成,只有一个按钮可以运行MovieCBO()MyMethod()
猜你喜欢
  • 1970-01-01
  • 2020-12-07
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 2012-10-04
  • 1970-01-01
相关资源
最近更新 更多