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

如何将冒号分隔的键值对字符串数组转换为字典并完成后续处理

方案说明

核心优化逻辑是仅做一次字符串拆分,后续所有操作都基于结构化的键值对象,无需重复处理字符串、拼接冒号。根据键是否存在重复可选择两种实现:

场景1:存在重复键(与你的示例场景匹配)

普通字典要求键全局唯一,因此优先用自定义结构化对象存储拆分结果,后续操作全基于强类型属性:

  1. 先定义可操作的条目类型(.NET 5+可用record,低版本用class即可)
// 定义条目结构,键为字符类型,值为数字类型
public record ItemEntry(char Key, int Value);

// 低版本C#用class的写法:
// public class ItemEntry
// {
//     public char Key { get; set; }
//     public int Value { get; set; }
// }
  1. 一次性拆分原数组为结构化列表,仅做一次字符串处理
string[] datalist = new string[] {"A:1300", "D:1430", "D:343", "G:5340" };
List<ItemEntry> entries = datalist.Select(item =>
{
    // 限制只拆分1次,避免值本身包含冒号时拆分错误
    var parts = item.Split(':', 2, StringSplitOptions.RemoveEmptyEntries);
    return new ItemEntry(
        Key: parts[0][0],
        Value: int.Parse(parts[1])
    );
}).ToList();
  1. 后续查询/修改无需再处理字符串
    比如查询所有D开头的条目:
var dEntries = entries.Where(e => e.Key == 'D').ToList();

修改值直接操作Value属性即可,不需要碰字符串。
4. 最终转回排序后的字符串数组

// 可自定义排序规则,示例为按键升序、值升序排列
string[] sortedResult = entries
    .OrderBy(e => e.Key)
    .ThenBy(e => e.Value)
    .Select(e => $"{e.Key}:{e.Value}")
    .ToArray();

场景2:所有键全局唯一

这种情况可以直接转字典,读写更简洁:

// 一次拆分转字典
Dictionary<char, int> entryDict = datalist.ToDictionary(
    keySelector: item => item[0],
    elementSelector: item => int.Parse(item.Split(':', 2)[1])
);

// 直接通过键读写值,无需任何字符串操作
// 取值:var dValue = entryDict['D'];
// 改值:entryDict['D'] = 1500;
// 新增:entryDict.Add('B', 2000);

// 转回排序后的数组
string[] result = entryDict
    .OrderBy(kv => kv.Key)
    .Select(kv => $"{kv.Key}:{kv.Value}")
    .ToArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:27:03