在C#中用for循环和Linq替换指定数组元素的方法
数组指定索引值替换的C#实现方案
给定如下二维字符串数组:
var originalArray = new string[][] { new string[] {"Dog","0","A","eat"}, new string[] {"cat","1","B","eat"} };
需要按照规则替换指定索引位置的值,得到目标数组:
var newArray = new string[][] { new string[] {"Dog","big","house","eat"}, new string[] {"cat","small","forest","eat"} };
替换规则:
- 数组子项的索引1位置:"0"替换为"big","1"替换为"small"
- 数组子项的索引2位置:"A"替换为"house","B"替换为"forest"
一、使用for循环实现
通过遍历原数组的每一个子数组,针对需要替换的索引位置,基于预定义的映射字典完成值替换,同时复制子数组避免修改原数据。
// 定义替换映射字典 var index1Map = new Dictionary<string, string> { {"0", "big"}, {"1", "small"} }; var index2Map = new Dictionary<string, string> { {"A", "house"}, {"B", "forest"} }; var originalArray = new string[][] { new string[] {"Dog","0","A","eat"}, new string[] {"cat","1","B","eat"} }; var newArray = new string[originalArray.Length][]; for (int i = 0; i < originalArray.Length; i++) { // 复制当前子数组,避免修改原数据 var subArray = (string[])originalArray[i].Clone(); // 替换索引1的值 if (index1Map.ContainsKey(subArray[1])) { subArray[1] = index1Map[subArray[1]]; } // 替换索引2的值 if (index2Map.ContainsKey(subArray[2])) { subArray[2] = index2Map[subArray[2]]; } newArray[i] = subArray; }
二、使用LINQ实现
利用LINQ的Select方法遍历子数组,对每个子数组进行值替换,通过字典的TryGetValue方法安全处理映射,最终转换为数组格式。
using System.Linq; // 定义替换映射字典 var index1Map = new Dictionary<string, string> { {"0", "big"}, {"1", "small"} }; var index2Map = new Dictionary<string, string> { {"A", "house"}, {"B", "forest"} }; var originalArray = new string[][] { new string[] {"Dog","0","A","eat"}, new string[] {"cat","1","B","eat"} }; var newArray = originalArray.Select(subArray => { // 复制子数组元素 var newSubArray = subArray.ToArray(); // 替换索引1的值 newSubArray[1] = index1Map.TryGetValue(newSubArray[1], out var val1) ? val1 : newSubArray[1]; // 替换索引2的值 newSubArray[2] = index2Map.TryGetValue(newSubArray[2], out var val2) ? val2 : newSubArray[2]; return newSubArray; }).ToArray();
内容的提问来源于stack exchange,提问作者Berkay Kulak
相关产品推荐
相关产品推荐

