11

私は2つの文字列配列を持っています:

A1: {"aa","bb","cc","dd","ee"}
A2: {"cc","dd,"ee","bla","blu"}

A1A2(この場合は 3)の間の同一要素の数をカウントするにはどうすればよいですか?

4

4 に答える 4

27

最短はおそらくこれです:

A1.Intersect(A2).Count()
于 2012-04-11T07:05:05.433 に答える
2

以下はうまく機能し、リストを使用するとパフォーマンスが向上する可能性があります。

List<string> a1 = new List<string>() { "aa", "bb", "cc", "dd", "ee" };
List<string> a2 = new List<string>() { "cc", "dd", "ee", "bla", "blu" };

a1.Count(match => a2.Contains(match));

または(@BlueVoodooに感謝)わずかに高速に実行される短いソリューション:

a1.Count(a2.Contains);

ただし、これらのソリューションは重複もカウントするため、次を使用できます。

HashSet<string> a1 = new HashSet<string>() { "aa", "bb", "cc", "dd", "ee" };
HashSet<string> a2 = new HashSet<string>() { "cc", "dd", "ee", "bla", "blu" };

HashSet は一意のシーケンスのみを保持するため、重複を回避できます。

上記をベンチマークした後、a1.Count(a2.Contains); で HashSet を実行します。HashSet を構築するオーバーヘッドがあっても、最速のソリューションを提供します。

于 2012-04-11T07:10:05.417 に答える
2
int[] id1 = { 44, 26, 92, 30, 71, 38 };
int[] id2 = { 39, 59, 83, 47, 26, 4, 30 };

id1.Intersect(id2).Count();
于 2012-04-11T07:13:01.607 に答える
1

次のコードはトリックを行う必要があります

        var A1 = new[] { "aa", "bb", "cc", "dd", "ee"};
        var A2 = new[] { "cc", "dd", "ee", "bla", "blu" };

        var query = from one in A1
                    join two in A2 on one equals two
                    select one;
        var result = query.ToArray();//this should have { "cc", "dd", "ee" }
于 2012-04-11T07:14:46.397 に答える