如何动态地将列表添加到列表中,然后将项添加到列表列表中新添加的列表中?

时间:2016-10-11 18:41:54

标签: c# list while-loop nested-lists

假设我在列表中列出了水果列表。该列表的组织方式首先是“人”这个词。将出现在列表中,并且该人员之后的所有进行中的项目都属于他们的篮子。然后列出的下一个人标记了一个解析时刻,以便为新人开始新的水果列表。最后,我希望所有这些人的所有这些水果列表都被编译成一个列表列表。水果数量和人数不详。然而,可以出现的水果类型是已知的。

以上是一个示例列表,如果上述内容没有意义:

Person
Apple
Apple
Cherry
Apple
Orange
Person
Grape
Lemon
Apple
Apple

仅提供水果:苹果,樱桃,橙子,葡萄,柠檬

这是我对代码的尝试,我使用了评论,我认为列表添加应该发生,但我不确定语法应该是什么(这就是我要求帮助的地方) :

while (notAtEndOfList)
{
    //create a new list of fruit for a person
    while (notAtEndOfList && input != "person")
    {
        nameOfDynamicallyCreatedFruitList.add(input.ToString());
    }
    peopleWithFruitList.add(nameOfDynamicallyCreatedFruitList);
}

2 个答案:

答案 0 :(得分:1)

我建议使用以下数据结构来表示您的数据:

public MessageService() {
    PNConfiguration config = new PNConfiguration();
    config.setPublishKey("your-pub-key");
    config.setSubscribeKey("your-sub-key");
    pubnub = new PubNub(config);
}

答案 1 :(得分:1)

你可以这样做:

  static class Program
  {
    static IEnumerable<KeyValuePair<string, List<string>>> SliceBy(this IEnumerable<string> data, string delimiter)
    {
      string key = null;
      List<string> values = null;

      foreach (var item in data)
      {
        if (item == delimiter)
        {
          if (key != null)
          {
            yield return new KeyValuePair<string, List<string>>(key, values);
          }
          key = item;
          values = new List<string>();
        }
        else
        {
          values.Add(item);
        }
      }

      if (key != null)
        yield return new KeyValuePair<string, List<string>>(key, values);
    }

    static void Main(string[] args)
    {
      var personFruits = new[] { "Person", "Apple", "Apple", "Cherry", "Apple", "Orange", "Person", "Grape", "Lemon", "Apple", "Apple", "Person", "Grape", "Lemon", "Apple", "Apple" };
      var result = personFruits.SliceBy("Person");

      foreach (var person in result)
      {
        Console.WriteLine(person.Key);
        foreach (var fruit in person.Value)
        {
          Console.WriteLine(fruit);
        }

        Console.WriteLine();
      }

    }
  }