1

文字列配列のリストがあります。反復によって新しい文字列配列を作成し、それをリスト内に配置しようとしましたが、contain関数を使用したときに存在するかどうかを確認せず、代わりに重複を挿入します。

List<string[]> possibleColumnValues = new List<string[]>();

while(true){

  string[] rArr = new string[5];
  //some code to populate the string goes here

  if (!possibleColumnValues.Contains(rArr){
  {
      possibleColumnValues.Add(rArr);
  }
}
4

4 に答える 4

4
private static bool AllElementInList(List<string[]> list, string[] arr)
{
    return list.Select(ar2 => arr.All(ar2.Contains)).FirstOrDefault();
}

として使用してください:

        List<string[]> list = new List<string[]>();
        string[] arr;

        bool flag = AllElementInList(list, arr);
于 2013-02-14T22:13:41.533 に答える
1

まだあまり効率的ではありませんが、トリックを実行する必要があります:

if (!possibleColumnValues.Any(rArr.SequenceEqual))
{
    possibleColumnValues.Add(rArr);
}
于 2013-02-14T22:07:00.910 に答える
1

このメソッドは、その要素Containsのメソッドに依存して、特定の値が含まれているかどうかを確認します。Equals配列はのデフォルトの実装をオーバーライドしないEqualsためContains、同じオブジェクトへの参照である場合(のデフォルトの動作)、リスト内にすでにある配列と等しいと見なされるだけですEquals

これを回避するには、Enumerable.Any()extensionメソッドをextensionメソッドと一緒に使用できますSequenceEqual

if (!possibleColumnValues.Any(item.SequenceEqual))
{
    possibleColumnValues.Add(rArr);
}
于 2013-02-14T22:09:30.877 に答える
1

Sequence equalメソッドを使用して、2つの文字列配列を比較できます。

C#言語のSystem.LinqからのSequenceEqual拡張機能を使用すると、1つのステートメントで2つのコレクションが等しいかどうかをテストできます。

SequenceEqual

ただし、そのパフォーマンスは代替実装よりもはるかに劣ります。

または独自のEquals関数を実装する

List.Containsメソッド

于 2013-02-14T22:10:55.100 に答える