web-dev-qa-db-ja.com

C#での2つの文字列配列の比較

5つの文字列配列があるとします。

string[] a = {"The","Big", "Ant"};
string[] b = {"Big","Ant","Ran"};
string[] c = {"The","Big","Ant"};
string[] d = {"No","Ants","Here"};
string[] e = {"The", "Big", "Ant", "Ran", "Too", "Far"};

これらの文字列をC#でループせずに互いに比較して、aとcのみがブール値trueを生成する方法はありますか?言い換えれば、すべての要素は等しくなければならず、配列は同じサイズでなければなりませんか?繰り返しますが、可能であればループを使用しません。

45
Wes Field

Linqを使用できます。

bool areEqual = a.SequenceEqual(b);
76
Ahmed KRAIEM

Enumerable.SequenceEqual を使用してみてください:

var equal = Enumerable.SequenceEqual(a, b);
15
Darren

すべてを一度に比較したい場合:

string[] a = { "The", "Big", "Ant" };
string[] b = { "Big", "Ant", "Ran" };
string[] c = { "The", "Big", "Ant" };
string[] d = { "No", "Ants", "Here" };
string[] e = { "The", "Big", "Ant", "Ran", "Too", "Far" };

// Add the strings to an IEnumerable (just used List<T> here)
var strings = new List<string[]> { a, b, c, d, e };

// Find all string arrays which match the sequence in a list of string arrays
// that doesn't contain the original string array (by ref)
var eq = strings.Where(toCheck => 
                            strings.Where(x => x != toCheck)
                            .Any(y => y.SequenceEqual(toCheck))
                      );

両方の一致を返します(おそらくこれを展開して、既に一致したアイテムを除外することができます)

3
Charleh

別の配列と異なる配列データを取得したい場合は、.Exceptを試すことができます

string[] array1 = { "aa", "bb", "cc" };
string[] array2 = { "aa" };

string[] DifferArray = array1.Except(array2).ToArray();

出力: {"bb"、 "cc"}

1
Manish Vadher