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

C#存储三元组整数资产数据应选用什么数据容器?

适配三元素组场景的C#容器选型与实现

容器选择逻辑

  • 若你需要按资产类型快速检索、聚合数据,选用Dictionary<int, List<AssetEntry>>:Key为资产类型编码(1/2/3),Value存储对应类型下的所有资产条目集合。
  • 若你仅需要按输入顺序遍历所有资产记录,直接用List<AssetEntry>即可,无需引入字典结构。

不要强行套用C++的std::pair:pair仅支持存储2个值,无法匹配你三字段的需求;且通用二元/三元组结构没有明确字段名,后期维护极易混淆字段含义,优先自定义强类型结构存储单条资产数据。

具体实现代码

首先定义单条资产的存储结构,用值类型结构体即可,轻量且语义明确:

public struct AssetEntry
{
    /// <summary>
    /// 资产类型:1=固定资产 2=流动资产 3=现金
    /// </summary>
    public int Type;
    /// <summary>
    /// 固定资产/流动资产为资产价值,现金类型为汇率
    /// </summary>
    public int ValueOrExchangeRate;
    /// <summary>
    /// 持有数量
    /// </summary>
    public int Quantity;
}

之后按步长3遍历输入数组,碰到-1终止符直接跳出循环,解析逻辑如下:

// 初始化字典,预置三类资产对应的存储列表
Dictionary<int, List<AssetEntry>> assetStatistics = new Dictionary<int, List<AssetEntry>>()
{
    {1, new List<AssetEntry>()},
    {2, new List<AssetEntry>()},
    {3, new List<AssetEntry>()}
};

// 输入示例数组
int[] inputNumbers = new int[]{1, 500, 10, 2, 25, 100, 3, 10, 50, -1, 2, 5, -1};

// 注意步长设为3,每次处理一组三个连续数字
for (int i = 0; i < inputNumbers.Length; i += 3)
{
    // 读取到终止标识直接结束解析
    if (inputNumbers[i] == -1)
        break;
    
    // 组装单条资产记录
    AssetEntry currentEntry = new AssetEntry()
    {
        Type = inputNumbers[i],
        ValueOrExchangeRate = inputNumbers[i+1],
        Quantity = inputNumbers[i+2]
    };

    // 将记录加入对应类型的集合
    assetStatistics[currentEntry.Type].Add(currentEntry);
}

补充说明

如果你不想单独定义结构体,C# 7.0及以上版本支持值元组,可以直接用三元组作为单条记录的存储类型,声明方式为Dictionary<int, List<(int type, int value, int count)>>,无需额外定义结构,但元组的字段名是自定义的临时命名,跨方法传递时容易丢失语义,仅适合临时逻辑使用。

你之前参考的两数一组解析代码逻辑不适配当前场景:两数一组步长为2,三数一组需要把步长改为3,且原代码中totals.Select(e.Value).Append(-1).ToArray()和当前解析逻辑无关,可以直接删除。


内容的提问来源于stack exchange,提问作者Random Name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 22:03:22