1

我有两个字符串数组

string[] a; 
string[] b; 

我怎样才能发现数组a中的元素序列与数组b相似?

因为我使用的是 .net2.0,所以我不能使用 LINQ。

编辑

这是我尝试过的

foreach (string val2 in a)
                { 
                                       foreach (string val1 in b)
                    {
                        if (val1 == val2)
                        {
                           // Values are same - continue processing
                        }
                        else
                        {
                            // Value not same   -- exit                         }
                    }
                } 
4

4 回答 4

4
    private bool Compare(string[] a, string[] b)
    {
        if (a.Length != b.Length) return false;

        for (int i = 0; i< a.Length; i++)
            if (a[i] != b[i]) return false;

        return true;
    }
于 2012-10-03T07:43:28.067 回答
3

我相信您想查看两个数组中的元素是否具有相同的值和相同的索引。你可以有一个简单的方法,如:

public static bool IsSequenceEqual(string[] a, string[] b)
{
    if (a.Length != b.Length)
        return false;
    for (int i = 0; i < a.Length; i++)
    {
        if (a[i] != b[i])
            return false;
    }
    return true;
}
于 2012-10-03T07:43:05.950 回答
0

如果两个列表都已排序,则可以使用其他解决方案之一。但如果列表未排序,您可以执行以下操作。

  Dictionary<string, byte> dict = new Dictionary<string, byte>();
  foreach (string s in a)
  {
      dict.Add(s, 0);
  }

  bool same = true;
  foreach (string s in b)
  {
      same &= dict.ContainsKey(s);
      if (!same) 
          break;
  }

您仍然可以在此之前进行简单的测试,例如检查等长等。

如果您可以使用 .NET 4.0,则可以使用Intersect数组方法。然后,您可以a.Intersect(b)将长度与aor的长度进行比较b。如果是这样,true那么列表是相等的,因为两个数组的所有元素都相交。您可以使用a.Union(b).

编辑 phoog 建议使用 Dictionary 而不是 ArrayList。

于 2012-10-03T08:13:35.670 回答
0
    /// <summary>
    /// Compare two string array. 
    ///  If both null - return true ; 
    ///  If only one is null - return false ;
    /// </summary>
    bool IsSequenceEqual(string[] a, string[] b)
    {
        if (a == null && b == null) // both null - return true
            return true;
        if (a == null || b == null) // only one is null - return false
            return false;

        if (a.Length != b.Length) // length is different - return false
            return false;

        // check if equal
        for (int i = 0; i < a.Length; i++)
        {
            if (a[i] != b[i])
                return false;
        }
        return true;
    }
于 2016-06-02T11:46:03.467 回答