首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将2个字典项聚合到一个对象中

将2个字典项聚合到一个对象中
EN

Stack Overflow用户
提问于 2015-09-03 20:18:26
回答 4查看 139关注 0票数 4

我有一个包含评估答案的字典,如下所示:

代码语言:javascript
复制
{
    {"question1", "7"},
    {"question1_comment", "pretty difficult"},
    {"question2", "9"},
    {"question2_comment", ""},
    {"question3", "5"},
    {"question3_comment", "Never on time"},
}

但是我需要将分数项和注释项组合成一个对象,如下所示

代码语言:javascript
复制
{
    {"question1", "7", "pretty difficult"},
    {"question2", "9", ""},
    {"question3", "5", "Never on time"},
}

我想我需要使用Aggregate方法来完成这个任务,但是我不知道从哪里开始。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-09-03 20:34:26

你可以这样做:

代码语言:javascript
复制
var res = data
    .Keys
    .Where(s => !s.EndsWith("_comment"))
    .Select(s => new[] {s, data[s], data[s+"_comment"]})
    .ToList();

ides首先过滤掉所有不以"_comment"结尾的键,然后使用这些键在结果数组中查找两段内容。

Demo.

票数 5
EN

Stack Overflow用户

发布于 2015-09-03 20:33:22

未经测试,但也许是个好主意:

代码语言:javascript
复制
Regex r = new Regex("^question\\d$");
var result = myDict.Where(x => r.IsMatch(x.Key)).Select(x => new {
        Question = x.Key,
        Score = x.Value,
        Comment = myDict[x.Key + "_comment"]
});

这种方法与DasBlinkenLight的方法相反。选择符合正则表达式^question\d$的所有条目(意味着所有条目都以一个数字结尾)。对于这些条目,您可以创建一个匿名类型的新实例,在该实例中,通过在字典中搜索适当的项来检索注释。

编辑:或者,为了避免使用正则表达式,您可以首先使用

代码语言:javascript
复制
myDict.Where(x => !x.Key.EndsWith("_comment"))
票数 0
EN

Stack Overflow用户

发布于 2015-09-03 20:37:21

在答案下面勾选

代码语言:javascript
复制
        Dictionary<string, string> objstr = new Dictionary<string, string>();
        objstr.Add("question1", "7");
        objstr.Add("question1_comment", "pretty difficult");
        objstr.Add("question2", "9");
        objstr.Add("question2_comment", "");
        objstr.Add("question3", "5");
        objstr.Add("question3_comment", "Never on time");

        var Mainobj = objstr.Where(x => x.Key.Contains("_"));
        var obj = objstr.Where(x => x.Key.Contains("_") == false);
        var final = from objl in obj
                    join Mainobjl in Mainobj
                    on objl.Key equals Mainobjl.Key.Replace("_comment", "") into matching
                    select new
                    {
                        question = objl.Key,
                        rank = objl.Value,
                        comment = matching.FirstOrDefault().Value
                    };
        var obj11 = final.ToList();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32375424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档