5

ジャグ配列の一意の値の数をカウントする方法を知りたいです。

ドメイン オブジェクトに、スペースで区切られた値を持つ文字列プロパティが含まれています。

class MyObject
{
    string MyProperty; //e.g = "v1 v2 v3"
}

MyObjectのリストが与えられた場合、一意の値の数をどのように判断できますか?

次の linq コードは、ギザギザの配列値の配列を返します。解決策は、アイテムの一時的な単一の配列を格納し、各ジャグ配列をループして、値が存在しない場合はそれらを追加することです。次に、単純なカウントは値の一意の数を返します。しかし、より良い解決策があるかどうか疑問に思っていました。

db.MyObjects.Where(t => !String.IsNullOrEmpty(t.MyProperty))
    .Select(t => t.Categories.Split(new char[] { ' ' },
        StringSplitOptions.RemoveEmptyEntries))
    .ToArray()

以下は、より読みやすい例です。

array[0] = { "v1", "v2", "v3" }
array[1] = { "v1" }
array[2] = { "v4", "v2" }
array[3] = { "v1", "v5" }

すべての値から、一意の項目はv1v2v3v4v5です。

固有アイテムの総数は5です。

おそらくlinqを使用して、一意の値のみを返すか、一意の値の数を返すソリューションはありますか?

4

2 に答える 2

8

はい、LINQ を使用すると、これは非常に簡単です。最初SelectManyにジャグ配列をフラット化してIEnumerable<string>すべての値を含むようにし、次に呼び出しDistinctて一意の値のみを選択します。

IEnumerable<string> uniqueValues = array.SelectMany(x => x).Distinct();

それらを数えたい場合は、次を使用しますCount

IEnumerable<string> uniqueValues = array.SelectMany(x => x).Distinct();
int uniqueCount = uniqueValues.Count();
于 2010-04-04T23:19:53.863 に答える
5

クエリ式のメソッドは

var query = (from arr in array
             from value in arr
             select value).Distinct();
于 2010-04-04T23:21:06.163 に答える