修改泛型列表索引:按DataType对应索引打印Contact列表数据的方法
按DataType匹配对应索引打印Contact列表数据的实现方案
你需要根据Contact类的DataType字段,将每个对象和指定索引关联后打印数据对吧?这里给你两种常见场景的实现方式,都是基于C#的,直接就能复用:
基础场景:遍历列表时直接匹配索引打印
首先我们可以建立一个DataType到索引的映射字典,这样能快速定位每个Contact对应的索引,同时保证代码的可维护性。下面是完整的示例代码,包括填充随机测试数据和打印逻辑:
using System; using System.Collections.Generic; public class Contact { public int Id { get; set; } public string DataVariable { get; set; } public string DataType { get; set; } public int PeopleId { get; set; } } class Program { static void Main() { // 初始化Contact列表 List<Contact> contactList = new List<Contact>(); Random random = new Random(); // 模拟给列表分配随机值(这里生成9条测试数据,覆盖三种DataType) string[] validDataTypes = { "address", "email", "telephonenumber" }; for (int i = 0; i < 9; i++) { contactList.Add(new Contact { Id = i + 1, DataVariable = $"Random_{random.Next(100, 999)}", DataType = validDataTypes[i % 3], PeopleId = random.Next(1, 10) }); } // 核心:建立DataType与索引的映射关系 var dataTypeToIndex = new Dictionary<string, int> { { "address", 0 }, { "email", 1 }, { "telephonenumber", 2 } }; // 按要求打印数据 Console.WriteLine("Contact列表数据(带对应索引):"); foreach (var contact in contactList) { // 用TryGetValue避免遇到未知DataType时崩溃 if (dataTypeToIndex.TryGetValue(contact.DataType, out int index)) { Console.WriteLine($"索引: {index} | Id: {contact.Id} | 类型: {contact.DataType} | 内容: {contact.DataVariable} | 关联人员ID: {contact.PeopleId}"); } else { Console.WriteLine($"[警告] 未找到DataType '{contact.DataType}'对应的索引,Contact ID: {contact.Id}"); } } } }
代码关键点说明
- 映射字典:
dataTypeToIndex把需求里的类型和索引绑定,后续如果要修改对应关系,只需要调整字典即可,不用改遍历逻辑。 - 随机数据填充:用循环和Random类模拟你提到的
foreach分配随机值的场景,你可以根据自己的实际需求替换这部分逻辑。 - 异常防护:用
TryGetValue代替直接索引字典,避免遇到未定义的DataType时抛出KeyNotFoundException,让代码更健壮。
扩展场景:按PeopleId分组,同一人员的多类型数据按索引整理
如果你的需求是把同一个PeopleId对应的不同类型数据(地址、邮箱、电话)按索引整理成一条完整记录打印,比如索引0存地址,索引1存邮箱,索引2存电话,可以用分组的方式实现:
// 接上面的代码,在Main方法中添加以下逻辑 Console.WriteLine("\n--- 按人员分组整理后的打印结果 ---"); // 按PeopleId分组 var groupedByPeople = contactList.GroupBy(c => c.PeopleId); foreach (var peopleGroup in groupedByPeople) { // 初始化数组,索引对应DataType string[] peopleInfo = new string[3]; foreach (var contact in peopleGroup) { if (dataTypeToIndex.TryGetValue(contact.DataType, out int index)) { peopleInfo[index] = contact.DataVariable; } } Console.WriteLine($"人员ID: {peopleGroup.Key}"); Console.WriteLine($"索引0(地址): {peopleInfo[0] ?? "无数据"}"); Console.WriteLine($"索引1(邮箱): {peopleInfo[1] ?? "无数据"}"); Console.WriteLine($"索引2(电话): {peopleInfo[2] ?? "无数据"}"); Console.WriteLine("-----------------------------"); }
这样打印出来的结果会更清晰,同一人员的所有类型数据按索引对应展示,适合需要整合人员信息的场景。
内容的提问来源于stack exchange,提问作者yuksel
相关产品推荐
相关产品推荐

