【问题标题】:Populating List<T> from multiple arrays从多个数组填充 List<T>
【发布时间】:2013-01-08 11:36:48
【问题描述】:

所以,基本上我需要用数组而不是手动填充这个当前列表:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            List<People> people = new List<People>()
            {
                new People{Name="John",Age=21,Email="john@abc.com"}
                new People{Name="Tom",Age=30,Email="tom@abc.com"}
            };
        }
    }

到目前为止,我有这样的人:

    class People
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Email { get; set; }
    }

我想改用数组,从 People 类到 MainWindow 类。比如:

    class People
    {
        public string[] Name =
        {
            "John",
            "Tom",
        };
        public int[] Age =
        {
            "21",
            "30",
        }
        ...
    }

我似乎无法弄清楚如何使用这些数组来填充这个列表。提前感谢您的宝贵时间。

【问题讨论】:

  • 只是出于好奇,您是否有任何理由在 People 类中使用数组而不是 List。不是批评,只是好奇。
  • 我只想将姓名、年龄等保存在不同的数组中,然后将它们放在一个列表中。我只是不知道更好。在 People 类中使用 List 会更好吗?
  • 一个 People 有多个 NameAge 没有意义。您当前的操作方式是“正确”的方式。您可以使用简单的for 循环从单独的姓名、年龄和电子邮件数组创建People
  • @user2008147 不是因为你这样做的方式,不。我只是好奇你的推理
  • 在我看来,正确的方法是在 People 类中有一个 List,但这只是我的看法

标签: c# arrays list populate


【解决方案1】:

Select 重载之一有index 作为参数

var names = new[]{ "John", "Tom" };
var ages  = new[]{ 21, 30, };
var mails = new[]{ "mail1", "mail2", };

names.Select((name, index) => 
       new People{
       Name = name, 
       Age = ages[index], 
       Email = mails[index]})
     .Dump();

打印:

Name Age Email 
John 21  mail1 
Tom  30  mail2 

【讨论】:

  • @CédricBignon 同意。你所说的对称是指像 polkduran 写的那样吗?
  • 这正是我的意思。
  • 好的,但请注意:他使用了people.Name.Count;,这带来了一点不对称的方面。不要误会我的意思 - 我更喜欢他的解决方案而不是我的解决方案,但我认为在当前情况下没有很好的解决方案
  • 在这种情况下:int c = Math.Min(people.Name.Count, people.Age.Count,...); 以获得更好的对称性
【解决方案2】:
int c = people.Name.Count;

Enumerable.Range(0,c).Select(i => new People(){Name = people.Name[i], Age = people.Age[i], ...});

您需要确保所有数组的大小相同。

如果您将“数据”设置为静态会更好。

我们可以做int c = Math.Min(people.Name.Count, people.Age.Count, ...); 以获得更好的“对称性”

【讨论】:

  • 在这种情况下,这似乎是最好的选择之一。
  • 鉴于对象初始化的格式和删除多余的() - 这将是最佳解决方案。
  • 能够使用您的解决方案使其正常工作,非常感谢 polkduran 和其他所有提供帮助的人!干杯!
【解决方案3】:

有很多方法可以做到这一点,如果这是预填充集合

public static class PeopleListFactory
{
   public static IEnumerable<People> Content(int someindicator)
   {
      List<People> result = new List<People>();
      switch (someIndicator)
      {      
        case 0: // fill it in here with and from whatever you like.
        break;
      }
      return result;
   }
}

然后在你的主要形式 只是

列出人员 = new List(PeopleListFactory.Content(0));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 2017-03-29
    • 2013-10-05
    相关资源
    最近更新 更多