🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# [C# 开发技巧]如何使不符合要求的元素等于离它最近的一个元素 ## 一、问题描述 今天在MSDN论坛中看到这样的一个问题,觉得非常锻炼思维能力,所以这里记录下来作为备份,题目的要求是这样的: 假设有一组字符串数组{"0","0","1","2","3",“0”,"4","0","0"},如何查找使0等于离它最近的且不为0的元素,如果离它最近的不为0的元素有两个,则等于上一个元素,即想得到重新赋值后这样的数组{"1","1","1","2","3",“3”,"4","4","4"} ## 二、实现思路 这里的实现思路摘自论坛中 [zjyh26](http://social.msdn.microsoft.com/profile/zjyh26/?ws=usercard-mini)的回复,实现思路为: * 1\. 首先对数组里面的数字进行一次遍历,如果当前的值不为“0”把值添加进的**结果数组**中,否则对它进行处理。 * 2\. 处理不为“0”的值的时候,用一种“等距离比较”的方法,找出等距离内的左右2个值,优先看左边的值是否为“0”,如果是的话跳过,如果不是的话将**结果数组**内的当前值替换为此值。 * 3\. 距离(就是代码里面的j)的最大值为数组长度减去1,遍历的时候注意i-j的值不小于0,i+j的值要小于数组长度。 具体实现代码为: ``` string[] s = new String[9] { "0", "0", "1", "0", "0", "0", "4", "0", "3" }; string[] result = new string[9]; for (int i = 0; i < s.Length; i++) { if (s[i] != "0") { result[i] = s[i]; continue; } // j是距离,初始化距离为1 for (int j = 1; j < s.Length; j++) { if (i - j >= 0) { // 左边距离为j的元素不等于0时 if (s[i - j] != "0") { result[i] = s[i - j]; break; } } if (i + j < s.Length) { // 右边距离为j的元素不等于0时 if (s[i + j] != "0") { result[i] = s[i + j]; break; } } } } for (int i = 0; i < result.Length; i++) { Console.WriteLine(result[i]); } Console.ReadLine(); ``` ## 三、运行结果 ![](https://box.kancloud.cn/2016-01-23_56a2eb319193f.jpg)