我一直试图在int类型的列表中找到(并替换)相邻的类似(等价)元素。
在执行程序时,我只需要记住一个约束条件:
-也就是说,查找/替换彼此相邻的元素的长度为=(或>)3。
以下是我所做的:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var list = new[] {2, 2, 2, 3, 3, 4, 4, 4, 4};
for (var i = 2; i < list.Length; i++)
{
if (list[i] == list[i - 1] && list[i] == list[i - 2])
{
list[i] = 0;
list[i - 1] = 0;
list[i - 2] = 0;
}
}
foreach(int item in list)
{
Console.Write(item);
}
Console.ReadKey();
}
}
我将所有相邻的相似/相等值替换为0。但有一个问题:
如果重复值长度为3/6/9,代码运行良好,以此类推;如果重复值长度为3/6/9,代码不会将数字值更改为0,以此类推
如果运行该程序,您将看到以下输出:000330004(因为有3个2s,所以工作正常,但是有4个4s,所以忽略了最后一个数字,没有将其转换为0)。
我需要的是:我明白发生了什么,为什么会发生。我只是不能像我希望的那样拥有它。如果有人能告诉我怎么做我会很感激的。谢谢。
最佳答案
对于任意数量的整数,这应该有效:
namespace Test
{
using System;
using System.Collections.Generic;
class MainClass
{
public static void Main (string[] args)
{
List<int> data = new List<int> ();
data.AddRange (new int[] { 2, 2, 2, 3, 3, 4, 4, 4, 4 });
int instance_counter = 0;
int previous_end = 0;
for (int i = 0; i < data.Count - 1; i++) {
instance_counter++;
if (data [i] != data [i + 1]) {
if (instance_counter > 2) {
for (int j = previous_end; j < i + 1; j++) {
data [j] = 0;
}
previous_end = i + 1;
}
instance_counter = 0;
previous_end = i + 1;
}
}
if (instance_counter > 2) {
for (int j = previous_end; j < data.Count; j++) {
data [j] = 0;
}
}
foreach (int x in data) {
Console.WriteLine (x);
}
}
}
}
关于c# - 在List <int>中查找(并替换)相邻的相等/相似元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28653728/