【问题标题】:Search and replace sub array搜索和替换子数组
【发布时间】:2012-08-03 12:46:14
【问题描述】:

我需要执行Search and Replace 子数组。这是我的代码

Dim IntegerArray() As Int32 = {1, 0, 2, 0, 0, 0,
                               1, 0, 2, 0, 0, 0, 
                               1, 0, 2, 0, 0, 0, 
                               0, 0, 0, 0}

具体来说,我需要在数组中搜索2, 0, 0, 0, 1元素,并将每个元素替换为5个

这是数组的图片

如何执行search and replace 作业?

注意:我尝试循环遍历数组,但要识别 5 个元素值非常棘手,到目前为止我仍然无法使其工作。是否有任何 .NET 内置函数可以完成这项工作或任何智能解决方案?

【问题讨论】:

  • 到目前为止,您的代码只是声明了数组。您在循环中尝试了什么?
  • @DanPuzey 我使用 5 个变量来存储最近的迭代,但不知何故我无法找到它的原始索引来完成替换工作
  • 这真的很难编码吗?两个 for 循环应该可以完成这项工作。内部 for 循环检查模式和外部迭代原始数组。
  • @Ankush 请分享您的循环解决方案。也许我可以向你学习一两件事!
  • @Teen 添加了我的答案:)

标签: .net vb.net arrays replace


【解决方案1】:

myArray 是整数数组

解决方案

String.Join(";", myArray).Replace("2;0;0;0;1", "5;5;5;5;5").Split(';').Select(n => Convert.ToInt32(n)).ToArray()

解释

  • 第 1 步:将整数数组转换为字符串(以 ';' 作为分隔符)
  • 第 2 步:将部分字符串 ("2;0;0;0;1") 替换为另一个值 ("5;5;5;5;5")
  • 第三步:将字符串转回数组

    Split(';').Select(n => Convert.ToInt32(n)).ToArray() 
    

【讨论】:

  • 对不起,我不明白你的解决方案。您可以使用整数数组扩展您的解决方案吗?
  • @Teem,在我的示例中,我正在使用整数数组。我已经更新了我的答案并添加了一些解释
  • @Dan Purzey,在这种情况下,什么是“污秽”? (对不起,英语不是我的母语)
  • 对不起@demas - 这是对您将数组转换为字符串并再次返回以解决问题的讽刺引用 - 暗示这是一个“肮脏”的解决方案。并不总是一件坏事 - 在这种情况下,我会说它非常巧妙!
  • 我有动态语言和函数式语言的背景,并且在 C# 方面的经验很少,所以我的解决方案可能很奇怪 :)
【解决方案2】:
    internal int[] Solve(int[] input, int[] pattern, int[] replace)
    {
        var result = new List<int>();

        for (int i = 0; i < input.Length; i++)
        {
            bool match = true;

            for (int j = 0; j < pattern.Length; j++)
            {
                if ((i + j >= input.Length) || (input[i + j] != pattern[j]))
                {
                    match = false;
                    break;
                }
            }

            if (match)
            {
                foreach (var item in replace)
                {
                    result.Add(item);
                }

                i += (pattern.Length - 1);
            }
            else
            {
                result.Add(input[i]);
            }
        }

        return result.ToArray();
    }

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 2018-02-24
    • 1970-01-01
    • 2011-10-31
    • 2012-01-29
    • 2020-07-20
    • 1970-01-01
    • 2015-10-03
    相关资源
    最近更新 更多