从列表中删除重复项,忽略空格

时间:2019-05-17 22:07:05

标签: c#

我想从数组中删除重复项,而忽略空格,因此Distinct.ToArray()将不起作用。

我将数组复制到列表中,并使用嵌套循环向后枚举该数组。我将内部循环的数组项与外部循环的数组项进行比较。循环运行没有问题,但是当我从复制的列表中删除索引到内部循环的项目时,出现异常。

for (int k = aArray.Length - 1; k > 0 ; k--)
            {
                for ( int j = k -1; j >= 0; j--)
            {
                if (Regex.Replace(aArray[k], @"\s", "") == 
Regex.Replace(aArray[j], @"\s", ""))
                    {
                        aList.RemoveAt(j);
                    }
                }
            }

如何基于数组中的项目比较枚举数组并从该数组的副本中删除项目?谢谢。

编辑:给定三个字符串,一个包含NOSPACE,一个包含NO SPACE(1 sp),一个包含NO SPACE(2 sp),但除此之外,我想删除其中两个。没关系的两个。区分不起作用,因为它不会忽略空格,建议的答案将删除所有空格。

第二次编辑:Greg的答案确实有效,但我不能对此表示赞同(小于15)。我整天都在苦苦挣扎。...

第3次修改:Greg的答案有效,但删除了字符串中的所有空格。我要删除除空格以外相同的项目,并在项目中保留空格。我仍然认为枚举应该以某种方式起作用。

2 个答案:

答案 0 :(得分:0)

尝试一下:

var result = aArray.Select(x => x.Replace(" ", string.Empty)).Distinct();

如果愿意,可以使用Regex.Replace(x, @"\s", "")代替x.Replace

答案 1 :(得分:0)

var array = new[] { " 1  2 ", " 12 ", "1  ", "  1", "12", "   1  ", "3 3", " 33" };

var result = array
    .ToLookup(k => k.Replace(" ", string.Empty))
    .Select(v => v.First())
    .ToArray();