Domanda

Vorrei sapere come posso contare il numero di valori unici in una matrice irregolare.

Il mio oggetto di dominio contiene una proprietà di stringa che ha valori di spazio delimitered.

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

Dato un di MyObject 's Come è possibile determinare il numero di valori univoci?

Il seguente codice LINQ restituisce una matrice di valori di matrice frastagliate. Una soluzione potrebbe essere quella di memorizzare un singolo array temporaneo di articoli, collegato attraverso ogni matrice irregolare e se non esistono valori, aggiungerli. Poi un conteggio semplice sarebbe tornato il numero unico di valori. Tuttavia, mi chiedevo se ci fosse un più bello soluzione.

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

Di seguito è riportato un esempio più leggibile:

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

Da tutti i valori i pezzi unici sono V1 , V2 , V3 , v4 , v5 .

Il numero totale di oggetti unici è 5 .

C'è una soluzione, possibilmente utilizzando LINQ, che restituisce solo i valori unici o restituisce il numero di valori unici?

È stato utile?

Soluzione

Sì, con LINQ questo è abbastanza semplice. Primo utilizzo SelectMany per appiattire la matrice irregolare in un IEnumerable<string> contenente tutti i valori e quindi chiamata Distinct per selezionare solo valori univoci:

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

Se volete contarli quindi utilizzare Count :

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

Altri suggerimenti

Un metodo di espressione di query è

var query = (from arr in array
             from value in arr
             select value).Distinct();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top