1

2つの文字列配列があります

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)の長さと比較します。その場合、両方の配列のすべての要素が交差するため、リストは等しくなります。で同様のトリックを実行できます。abtruea.Union(b)

編集 foog で提案されているように、ArrayList の代わりに Dictionary を使用します。

于 2012-10-03T08:13:35.670 に答える