如何将PHP多维数组代码转换为C#实现并支持遍历?
C# 实现 PHP 嵌套关联数组逻辑并支持遍历
PHP 中的双层关联数组结构,在 C# 里可以通过嵌套 Dictionary + 自定义实体类来实现,这是最贴合原逻辑且便于后续处理的方案。
1. 定义实体类(替代 PHP 中的关联数组)
先创建一个对应 name 和 age 的类,让数据结构更清晰:
public class Person { public string Name { get; set; } public int Age { get; set; } }
2. 初始化嵌套字典并添加数据
外层字典用日期字符串作为键,内层字典用 int 类型的 ID 作为键,值为 Person 对象:
// 初始化嵌套字典 var data = new Dictionary<string, Dictionary<int, Person>>(); // 添加第一条数据:先判断日期键是否存在,不存在则创建内层字典 string targetDate = "09/10/2023"; if (!data.ContainsKey(targetDate)) { data[targetDate] = new Dictionary<int, Person>(); } data[targetDate][10] = new Person { Name = "John Smith", Age = 50 }; // 添加第二条数据:日期已存在,直接操作内层字典 data[targetDate][11] = new Person { Name = "Amie Kim", Age = 30 };
3. 遍历数据
可以通过双层 foreach 循环遍历所有层级的数据,C# 7.0+ 支持解构语法让代码更简洁:
// 遍历外层日期分组 foreach (var (date, idDict) in data) { Console.WriteLine($"日期:{date}"); // 遍历当前日期下的所有ID和人员信息 foreach (var (id, person) in idDict) { Console.WriteLine($"ID: {id},姓名: {person.Name},年龄: {person.Age}"); } }
可选:用匿名类型简化(不推荐复杂场景)
如果只是临时使用,也可以不用自定义类,直接用匿名类型,但匿名类型无法跨方法传递,后续处理受限:
var data = new Dictionary<string, Dictionary<int, object>>(); data["09/10/2023"][10] = new { Name = "John Smith", Age = 50 }; data["09/10/2023"][11] = new { Name = "Amie Kim", Age = 30 }; // 遍历时需要强制类型转换 foreach (var dateGroup in data) { foreach (var entry in dateGroup.Value) { var person = (dynamic)entry.Value; Console.WriteLine($"ID: {entry.Key}, 姓名: {person.Name}, 年龄: {person.Age}"); } }
内容的提问来源于stack exchange,提问作者mana
相关产品推荐
相关产品推荐

