如何使用 LINQ 将字典的键和值合并到一个列表中?

2023-11-27

我有一本字典,其中键是一个字符串,值是与该键对应的字符串列表。我想显示字典中的所有键,并在该键下方显示与该键关联的值。像这样的东西:

Key 1
    Value 1
    Value 2
    Value 3
Key 2
    Value 1
    Value 2

在 C# 2.0 中,我会这样做(values is the Dictionary):

StringBuilder sb = new StringBuilder();
foreach(KeyValuePair<string, List<string>> pair in values)
{
    sb.AppendLine(pair.Key);
    foreach(string item in pair.Value)
    {
        sb.AppendLine('\t' + item);
    }
}

我如何使用 LINQ 进行等效操作?看起来应该是可能的,但我不知道该怎么做。

如果我使用values.SelectMany(p => p.Values),那么最终结果中只有值,而不是键。

我想到的任何其他解决方案都有类似的限制。


C# 中的解决方案

这是一个使用以下解决方案聚合扩展法:

string result = values.Aggregate("",
                  (keyString, pair) =>
                    keyString + "\n" + pair.Key + ":"
                      + pair.Value.Aggregate("",
                          (str, val) => str + "\n\t" + val)
                  );

C# 中没有聚合子句的 LINQ 语法(但显然有视觉基础对于一些预定义的函数)。

这个解决方案可能看起来有些复杂,但是聚合方法非常有用。

聚合如何工作

它的工作原理如下:如果你有一个List<int>您可以将所有值组合成一个单一合计值.

这与Select方法,它不会修改列表的长度。或者Where方法,它确实缩小了列表,但它仍然是一个列表(而不是单个值)。

例如,如果您有一个列表{1, 2, 3, 4}您可以将它们组合成一个值,如下所示:

int[] xs = {1, 2, 3, 4};
int sum = xs.Aggregate(0, (sumSoFar, x) => sumSoFar + x);

所以你给了两个值Aggregate方法;种子值和“组合器”函数:

  • 您开始聚合单个种子值(0在这种情况下)。
  • 列表中的每个值都会调用您的组合器函数。
    第一个参数是到目前为止的计算结果(第一次为零,稍后将有其他值),并将其与值结合起来x.

简而言之,就是这样Aggregate方法适用于List<int>。它的工作原理是一样的KeyValuePair<string, List<string>>,但只是类型不同。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 LINQ 将字典的键和值合并到一个列表中? 的相关文章

  • 编译时运算符

    有人可以列出 C 中可用的所有编译时运算符吗 C 中有两个运算符 无论操作数如何 它们的结果始终可以在编译时确定 它们是sizeof 1 and 2 当然 其他运算符的许多特殊用途可以在编译时解决 例如标准中列出的那些整数常量表达式 1 与
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur

随机推荐

  • Iterator.remove() IllegalStateException

    在下面的代码中 我有一个 try catch 块 它尝试使用 Iterator 从 Vector 中删除元素 我创建了自己的课程QueueExtendingVect延伸Vector并实施Iterator 变量qev1是类的一个实例Queue
  • 如何将 IEnumerable> 转换为 IObservable

    是否有内置方法将 IEnumerable gt 转换为 IObservable 顺序并不重要 重要的是我得到的东西 尽管最好是在它们完成的时候 如果它还不存在 那么实现它的好方法是什么 我相信这会起作用 tasks Select t gt
  • 读/写二进制文件

    我只是想从二进制文件中读取 写入 我一直在关注this教程 它可以工作 除了它似乎正在将内容写入 txt 文件 我在测试时将文件命名为test bin 但记事本可以打开它并正确显示它 所以我认为它实际上不是一个二进制文件 我已经告诉它它是一
  • kotlin 如何使 setOnClickListener 接受函数作为参数

    在 kotlin 中 我们可以使用setOnClickListener 像这样 view setOnClickListener println Hello 但是如果我定义自己的接口 我只能传递匿名对象 如下所示 obj setMyListe
  • 如何在Python中的文件中写入新行

    我有一个这样的文件 word number word number 我只想保留 保留这些单词 再次换行中的一个单词 word word 到目前为止我的代码 f open new file txt w with open initial fi
  • 查找 SQL 中的所有整数间隙

    我有一个数据库 用于存储我从外部源获取的游戏不同比赛的信息 由于一些问题 数据库中偶尔会出现空白 可能缺少 1 个 ID 到几百个 ID 我想让程序提取丢失游戏的数据 但我需要先获取该列表 以下是表格的格式 id pk identity G
  • 更改“多选”下拉框中所选项目的背景颜色? [复制]

    这个问题在这里已经有答案了 我想为多选下拉框中的所选项目赋予黄色 选择后默认背景是灰色的 如何执行此操作HTML CSS 这个问题是关于多选但对于单选请参考 相关但不重复 如何将背景颜色应用于选定的选项 我们可以简单地借助以下 CSS 来完
  • Laravel 5.1 视图未找到

    这似乎是 Laravel 中时不时出现的一个问题 我正在编写一个 CRUD 控制器 以配合它 但是经过测试 我得到了InvalidArgumentException in FileViewFinder php line 137 View b
  • 如何在 Firebase 托管中实现 .htaccess 配置?

    我的域中有一个 htaccess 配置 允许我的应用程序与路由完美配合 当您刷新 Angular 2 应用程序无法解析路线时 它可以避免错误 我当前的配置是这个
  • 如何在 PyQt 中使用 pdf.js 查看器渲染 PDF?

    我尝试在我的项目中添加 pdf js 查看器文件 它可以在 Chrome Mozilla Safari 等浏览器中运行 但它不会加载 node webkit 和 PyQt webkit 中的某些页面 我正在尝试使用 iframe 加载文件
  • 为什么只将数据存储在平衡二叉搜索树的叶节点中?

    我买了一本关于计算几何的好小书 在到处阅读时 我经常偶然发现这种特殊的二叉搜索树的使用 这些树是平衡的 应该只在叶节点中存储数据 而内部节点应该只存储引导搜索到叶节点的值 下图显示了该树的示例 其中叶子是矩形 内部节点是圆形 我有两个问题
  • JQuery 使用 .each() 延迟

    您有什么想法可以使用 JQuery 的延迟方法和一个函数来检测所有更改的表单并将每个表单作为 Ajax 帖子提交吗 如果我只列出大量表单提交 我可以得到同样的结果 但如果我使用 form changed each function retu
  • 预填充 HTML 表单文件输入

    我有一个 VBScript 它可以检查 HTML 表单 用固定值填充它 然后提交它 到目前为止它工作正常 但现在我需要设置将在表单数据中上传的文件的位置 我相信如果我将位置设置为该值 它就会起作用 但事实并非如此
  • 强制WebView在某个网络上运行

    是否可以强制WebView通过指定的方式加载 URLNetwork 我的设备打开了两个网络连接 wifi 和移动数据 移动数据网络被设置为传出连接的默认网络 因此连接管理器返回移动数据网络connectivityManager getAct
  • UIPickerView 与 NSDictionary

    我是一名 NET 程序员 也是 Objective C 的新手 我正在尝试制作一个 UIPickerView 它的作用类似于 NET 下拉列表 用户看到文本列表并选择一个 所选值 即 ID 将在代码中使用 我已经浏览了近半天试图弄清楚这一点
  • != 在 jade/pug 中起什么作用?

    在下面的翡翠代码中如何工作 messages extends layout block content spacer container row col lg 8 col lg offset 2 col md 10 col md offse
  • 将自定义 NSURLProtocol 与 UIWebView 和 POST 请求结合使用

    在我的 iOS 应用程序中 我使用 UIWebView 和自定义协议 带有我自己的 NSURLProtocol 实现 我非常小心地确保每当我加载 url 时 我都会将类似的内容加载到我的 UIWebView 中 myprotocol mys
  • 在共享库中使用全局变量

    我正在用 C 编写一个应用程序 它使用全局变量 日志文件结构 在我的应用程序中 我在运行时动态加载共享库 并且我想使用指向相同日志文件结构的全局变量来记录共享库 这在简单的方法中似乎是不可能的 将全局变量声明为 extern 将不起作用 因
  • 无法编译、无法执行dex、无法合并、非巨型指令

    我需要一些帮助 因为我自己无法找到解决方案 我阅读了很多帖子并进行了很多调查 但没有解决方案 我有一个项目 有一些子项目 操作栏 滑动 facebook 等 当我尝试编译它时 我总是收到以下错误 2013 07 31 14 44 06 De
  • 如何使用 LINQ 将字典的键和值合并到一个列表中?

    我有一本字典 其中键是一个字符串 值是与该键对应的字符串列表 我想显示字典中的所有键 并在该键下方显示与该键关联的值 像这样的东西 Key 1 Value 1 Value 2 Value 3 Key 2 Value 1 Value 2 在