-3

int[] com(初期段階で)2つの値0と1を含む1つの配列があります。

もう1つの配列を次のように定義しますString[] arr = new String[100];

arr次の6つの要素が含まれています。

arr[0]={4,8,10,11,12,14}
arr[1]={1,2,3,4,8,12,14}
.. arr[6]=something

arr[0]とarr[1]の交点を見つけたいので、次のようにコードを記述しました。

foreach (int value1 in intersect) 
{
     //perform logic
}

ここでは、value1を4,8として取得する必要がありますが、value1を52,44として取得しています。

私がしていることの何が問題になっていますか?

4

2 に答える 2

2

これがあなたがしていることです。int配列ではなく文字列配列があります。これを行う場合

arr[0]="4,8,10,11,12,14";
arr[1]="1,2,3,4,8,12,14";
var intersection = arr[0].Intersect(arr[1]);

arr[0]とは文字列であるため、結果として、取得している整数値にそれぞれ対応するarr[1]文字のリストが取得されます。'4', ',' , '8', '1', '2'52 44 56 49 50

文字列の配列の代わりに整数行列を宣言する必要がありint [,] arr = new int[100,100];ますList<List<int>>。少なくともこのコンテキストでは、文字列のような整数を使用することはできません。

List<List<int>> arr = new List<List<int>>();
arr.Add(new List<int>{4,8,10,11,12,14});
arr.Add(new List<int>{1,2,3,4,8,12,14});
var intersection = arr[0].Intersect(arr[1]);

しかし、私を信じていない場合で、前のコードが意味をなさないことを確認したい場合は、foreachループを変更して、何が起こっているかを確認してください。

foreach (char value1 in intersect) 
{
     //perform logic
}

さらに、これを行う必要はありません。

int zero= Convert.ToInt32(com[0].ToString());
int one= Convert.ToInt32(com[1].ToString());

次のようなものに置き換えることができます。

int zero= com[0];
int one = com[1];

しかし、それにもかかわらず、これを行うことができるので、それは無意味です:

arr[com[0]]
arr[com[1]]
于 2013-03-26T22:57:50.533 に答える
1

LINQ Intersectメソッドは、配列間の交差を正しく計算します。

var a = new [] {4,8,10,11,12,14};
var b = new [] {1,2,3,4,8,12,14};
var intersection = a.Intersect(b);
// intersection:
// IEnumerable<int> { 4, 8, 12, 14 }

上記のコード(失敗しない最小のカウンター例を表す)は、LINQPadで実行されました。

IntersectはEqualsに依存しているため、次のように「壊す」ことができます。

var a = new object[] {4,8,10,11,12,14};
var b = new object[] {"1","2","3","4","8","12","14"};
var intersection = a.Intersect(b);
// intersection:
// IEnumerable<object> { }

もちろん、これは「ランダムな新しい値」を考慮していません-それは他の場所での単なるバグです。

于 2013-03-26T22:33:01.473 に答える