我一直试图在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/

10-12 03:44