You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改泛型列表索引:按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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:34:27