C# 在c中从数组中删除类似字符串

C# 在c中从数组中删除类似字符串,c#,arrays,C#,Arrays,假设我有如下字符串数组: string[] array = new string[6]; array[0] = "http://www.s8wministries.org/general.php?id=35"; array[1] = "http://www.s8wministries.org/general.php?id=52"; array[2] = "http://www.ecogybiofuels.com/general.php?id=6"; array[3] = "http://www

假设我有如下字符串数组:

string[] array = new string[6];

array[0] = "http://www.s8wministries.org/general.php?id=35";
array[1] = "http://www.s8wministries.org/general.php?id=52";
array[2] = "http://www.ecogybiofuels.com/general.php?id=6";
array[3] = "http://www.stjohnsheriff.com/general.php?id=186";
array[4] = "http://www.stjohnsheriff.com/general.php?id=7";
array[5] = "http://www.bickellawfirm.com/general.php?id=1048";
现在我只想存储一个类似的字符串iehttp://www.s8wministries.org/general.php?id=35 丢弃已删除的任何其他字符串http://www.s8wministries.org 并将其存储在另一个数组中

请问我该怎么办

我的尝试如下:-

//从只存储另一个数组中的一个相似字符串的数组中删除相似字符串

        foreach (var olu in array)
        {

            string findThisString = olu.ToString();
            string firstTen = findThisString.Substring(0, 15); 

            // See if substring is in the table.
            int index1 = Array.IndexOf(array, firstTen);  //substring is not in table

        }

下面是我将如何处理这个问题

初始化用于保存域名的哈希表或字典 循环浏览每个项目 使用“.”、“/”等作为分隔符执行字符串拆分操作-通过分析部分找出域。 检查哈希表中是否存在域名。如果是,则放弃当前条目。如果它不存在,请插入哈希表,并将当前条目添加到所选条目的新列表中。
另一种选择是按字母顺序对条目进行排序。一次检查一个。选择具有域名的条目。跳过具有相同域名的所有后续条目。当域名再次更改时,请选择下一个条目

假设结果存储在一个名为unique_array的数组中,当前数组名为array。伪代码如下:

bool found = false;
for(int i = 0; i < array_size; i++)
{   if(array[i] starts with "http://www.s8wministries.org")
    {   if(found) continue;
        found = true;
    }
    add array[i] to end of unique_array;
}

使用字符串列表尝试此操作,这样您就有了包含URL的字符串列表,您可以使用类来比较域:

for(int i = 0; i < strList.Length; i++)
{   
  Uri uriToCompare = new Uri(strArray[i]);
  for(int j = i+1; j < strArray.Length; j++){
     Uri uri = new Uri(strArray[j]);
     if( uriToCompare.Host  == uri.Host){
        strList.RemoveAt(j);
     }     
  }
}

我将通过创建一个继承IEqualityComparer的类来实现稍微更高的自动化,该类利用了以下重要的答案:

一旦您拥有了该类,您就可以像这样使用Distinct:

var distinctArray = array.Select(s => new Uri(s)).Distinct(new PropertyComparer<Uri>((a, b) => a.Host == b.Host));
这样就只剩下一个只包含不同域的数组。它是一个IEnumerable,因此您可能需要。列出它或其他内容,或将其从URI还原回字符串。但我认为这种方法可以使代码更具可读性。

请尝试以下代码:

    string[] array = new string[6];
    array[0] = "http://www.s8wministries.org/general.php?id=35";
    array[1] = "http://www.s8wministries.org/general.php?id=52";
    array[2] = "http://www.ecogybiofuels.com/general.php?id=6";
    array[3] = "http://www.stjohnsheriff.com/general.php?id=186";
    array[4] = "http://www.stjohnsheriff.com/general.php?id=7";
    array[5] = "http://www.bickellawfirm.com/general.php?id=1048";
    var regex = @"http://www.[\w]+.[\w]+";
    var distList = new List<string>();
    var finalList = new List<string>();
    foreach (string str in array)
    {
        Match match = Regex.Match(str, regex, RegexOptions.IgnoreCase);
        if (match.Success)
        {
            var uniqueUrl = match.Groups[0].Value;
            if (!distList.Contains(uniqueUrl))
            {
                distList.Add(uniqueUrl);
                finalList.Add(str);
            }
        }
    }

这里finalList包含所需的URL列表

我想您已经查找了如何使用?您能告诉我们您做了什么尝试以及遇到了什么问题吗?使用子字符串不起作用。请看一下我的尝试:-//从数组中的每个变量olu的数组中删除相似项{string findthistring=olu.ToString;string firstTen=findthistring.Substring0,15;//查看字符串是否在表中。int index1=Array.IndexOfarray,firstTen;}最好将代码添加到问题中,而不是添加注释,这样会更容易阅读:您需要检查的部分是否只检查子域/域?在比较中,您的示例中顶级domain.com之后的所有内容都应该忽略?我只检查子域/域,只是为了进行比较,一旦找到一个域d、 我会将其存储在另一个数组中,并丢弃该数组中具有相同相似性的所有其他域。我将试用您的伪代码并更新您的伪代码。我仍然需要更多的头脑风暴思考您提倡的这种方法,它是否会将url:-与存储前url和丢弃后一个url区分开来。主机属性将比较s8wministries.org.g我会尝试阅读msdn给定的链接。您的方法可行,但我需要完整的url,如中所示,而不是www.s8wministries.org。如果您能帮助我修改代码以显示完整的url,请提前感谢
    string[] array = new string[6];
    array[0] = "http://www.s8wministries.org/general.php?id=35";
    array[1] = "http://www.s8wministries.org/general.php?id=52";
    array[2] = "http://www.ecogybiofuels.com/general.php?id=6";
    array[3] = "http://www.stjohnsheriff.com/general.php?id=186";
    array[4] = "http://www.stjohnsheriff.com/general.php?id=7";
    array[5] = "http://www.bickellawfirm.com/general.php?id=1048";
    var regex = @"http://www.[\w]+.[\w]+";
    var distList = new List<string>();
    var finalList = new List<string>();
    foreach (string str in array)
    {
        Match match = Regex.Match(str, regex, RegexOptions.IgnoreCase);
        if (match.Success)
        {
            var uniqueUrl = match.Groups[0].Value;
            if (!distList.Contains(uniqueUrl))
            {
                distList.Add(uniqueUrl);
                finalList.Add(str);
            }
        }
    }