使用键列表初始化新字典

时间:2019-06-17 09:54:52

标签: c# linq dictionary

我正在初始化一个新的Dictionary,并像这样逐个放置每个键:

doctrine_migrations:
  dir_name: "%kernel.project_dir%/app/Migrations"

这很好,但是其余键必须是我在<?php $args = array( 'numberposts' => 3 ); $lastposts = get_posts( $args ); foreach($lastposts as $post) : setup_postdata($post); ?> <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> </h2> <?php endforeach; ?> 中创建的标头

是否可以在上面的初始化过程中添加此标头列表?像这样:

igData = data.Select(x => new Dictionary<string, string> {
                     ["Date"] = x.GetValueOrDefault("DATE"),
                     ["SP"] = x.GetValueOrDefault("SP"),
                     ["IG"] = x.GetValueOrDefault("IG")}).ToList();

我知道值是相同的,但这是预期的。以上是否可能,或者这是我将要单独处理的。最好在上面这样做,因为我可以访问List<string> headers集合中的值。

4 个答案:

答案 0 :(得分:3)

您不能在这样的初始化程序中完成此操作,但我建议您可以使用一些ConcatToDictionary进行此操作:

igData = data.Select(x => {
   return new KeyValuePair<string,string>[]{
          new KeyValuePair<string,string>("Date", x.GetValueOrDefault("DATE")),
          new KeyValuePair<string,string>("SP", x.GetValueOrDefault("SP")),
          new KeyValuePair<string,string>("IG", x.GetValueOrDefault("IG"))
       }.Concat(
          headers.GetHalfHourlyTimeHeaders().Select(y => new KeyValuePair<string, string>
                                             (y, x.GetValueOrDefault["IG"])).ToList()
       ).ToDictionary(k => k.Key, v => v.Value);
});

答案 1 :(得分:3)

^(?=[\x00-\x7F]+$)(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$

查询语法对我来说看起来更好

igData = data.Select(x =>
    new Dictionary<string, string>(headers.GetHalfHourlyTimeHeaders().ToDictionary(y => y, y => x.GetValueOrDefault("IG")))
    {
        ["Date"] = x.GetValueOrDefault("DATE"),
        ["SP"] = x.GetValueOrDefault("SP"),
        ["IG"] = x.GetValueOrDefault("IG")
    });

答案 2 :(得分:0)

与Jamiec的答案类似,但在我看来更具可读性(但未经性能测试):

List<Dictionary<string, string>> igData = data.Select(x => 
    {
        var dict = new Dictionary<string, string>
        {
            ["Date"] = x.GetValueOrDefault("DATE"),
            ["SP"] = x.GetValueOrDefault("SP"),
            ["IG"] = x.GetValueOrDefault("IG")
        };

        // I hope I understand correctly that GetHalfHourlyTimeHeaders returns List<string>
        foreach (string header in headers.GetHalfHourlyTimeHeaders())
        {
            dict.Add(header, x.GetValueOrDefault("IG"));
        }

        return dict;
    }
).ToList();

答案 3 :(得分:0)

我喜欢这种方式:

igData =
    data
        .Select(x =>
            Enumerable
                .Concat(
                    headers
                        .GetHalfHourlyTimeHeaders()
                        .Select(k => new { k, v = x.GetValueOrDefault("IG") }),
                    new [] { "Date", "SP", "IG" }
                        .Select(k => new { k, v = x.GetValueOrDefault(k.ToUpper()) }))
                .ToDictionary(z => z.k, z => z.v))
        .ToList();