2
[0,0,0]
[1,1,1]
[2,2,2]

上記の2次元配列があります。

3 つのことを確認する必要があります。まず、すべてのセルが上記のように入力されているかどうかを確認します。

2番:

[0,0,0]
[1]
[]

上記の配列では、すべてのセルが行ごとに入力されているかどうかを確認する必要があります。

三番:

[0,]
[1,1]
[2,2,2]

最初の列の最初の要素が入力されているかどうかを確認したい。

foreach ループまたは for ループで実行できます。All(predicate)しかし、私はlinqで使いたいです。

            foreach (var ticketValue in ticketValues)
            {
                firstRow = ticketValue.All(x => x == i);

                foreach (var value in ticketValue)
                {

                }
            } 

これを行う最良の方法は何ですか?

4

1 に答える 1

4

私はあなたがこのようにその2Dを設定していると仮定しています:

int?[][] myArrayA = new int?[][] { new int?[] {0,0,0}, new int?[] {1,1,1}, new int?[] {2,2,2} };
int?[][] myArrayB = new int?[][] { new int?[] {0,0,0}, new int?[] {1}, new int?[] {null} };
int?[][] myArrayC = new int?[][] { new int?[] {0,null}, new int?[] {1,1,1}, new int?[] {2,2,2} };

したがって、Linqを使用してこれを行います。

bool FirstCheck(int?[][] theArray)
{
    int size = (from arrays in theArray select arrays.GetUpperBound(0)).Max();

    var check = from arrays in theArray
                where theArray.All(sub => sub.GetUpperBound(0) == size)
                select arrays;

    return size + 1 == check.Count<int?[]>();
}

bool SecondCheck(int?[][] theArray)
{
    int size = (from arrays in theArray select arrays.GetUpperBound(0)).Max();

    var check = from arrays in
                    (from subs in theArray
                     where theArray.All(sub => sub.All(value => value != null))
                     select subs)
                where arrays.GetUpperBound(0) == size
                select arrays;

    return size + 1 == check.Count<int?[]>();
}

bool ThirdCheck(int?[][] theArray)
{
   int size = (from arrays in theArray select arrays.GetUpperBound(0)).Max();

   var check = from arrays in theArray
               where theArray.All(array => array[0].HasValue)
               select arrays;

   return size + 1 == check.Count<int?[]>();
}

それがあなたが望んでいたことだといいのですが...

于 2012-07-16T16:49:53.590 に答える