从数组字符串中删除多余的字符串

时间:2020-01-08 09:31:01

标签: c# arrays string

我想删除字符串数组中包含的现有字符串。 例如:

字符串数组包含:

        if device.isNew == "1" {

            self.title.mas_updateConstraints { (make) in
                    make?.width.lessThanOrEqualTo()(163.w)
            }

            self.newTag.isHidden = false
        } else {

            self.newTag.isHidden = true

            self.title.mas_updateConstraints { (make) in
                make?.width.lessThanOrEqualTo()(207.w)
            }

        }

想要的结果:

string [] arra = new string[] {"Financial banking", "mobile application", "customer account opening", "financial", "banking", "mobile", "application", "account banking"};

要删除:

string [] result = new string[] {"Financial banking", "mobile application", "customer account opening"}

因为这些字符串已经存在于字符串数组中

我尝试了以下代码:

financial, banking, mobile, application, account banking 

但是它没有返回期望的结果。任何帮助。

3 个答案:

答案 0 :(得分:4)

我假设您的算法是:

  1. 将输入中的每个元素分成单词(用空格分隔)
  2. 如果我们以前看过所有这些单词(不区分大小写),请忽略该元素
  3. 否则,将该元素添加到输出中,并记住所有这些单词

这会产生预期的输出,但是可能值得在问题中阐明算法。

如果正确,则可以执行以下操作:

'path-aliases' => array(
        '%drush-script' => 'your-server-path-here/.composer/vendor/drush/drush/drush'
      ),

我们使用HashSet<string>来记录我们看到的单词,并告诉它在进行单词之间的比较时使用StringComparer.InvariantCultureIgnoreCase比较器,因此它会说两个单词是相同的即使他们使用不同的大小写。 (您可能要在此处使用StringComparer.CurrentCultureIgnoreCaseStringComparer.OrdinalIgnoreCase。)

答案 1 :(得分:0)

Distinct方法又如何呢?

var result = arra.Distinct(new DistinctItemComparer()).ToArray();

但是,为此您可能还需要使用自定义相等比较器。

public class DistinctItemComparer : IEqualityComparer<string>
{

    public bool Equals(string x, string y)
    {
        return y.ToLower().Split().Any(c => x.ToLower().Contains(c));
    }

    public int GetHashCode(string obj)
    {
        return 1;
    }
}

在这里查看结果:

https://dotnetfiddle.net/FoC0C5

答案 2 :(得分:-1)

如果唯一的目的是删除冗余元素。然后您可以尝试以下方法:

string [] arra = new string[] {"Financial banking", "mobile application", "customer account opening", "financial", "banking", "mobile", "application", "account banking"};
var elementsToRemove = new string[]{"financial", "banking", "mobile", "application", "account banking"};
var newArray = arra.Except(elementsToRemove).ToArray(); 

您将需要引入System.Ling名称空间以访问Except方法。

相关问题