Как найти уникальные значения в зазубренном массиве

StackOverflow https://stackoverflow.com/questions/2576228

  •  24-09-2019
  •  | 
  •  

Вопрос

Я хотел бы узнать, как я могу рассчитывать количество уникальных значений в зазубренном массиве.

Мой объект домена содержит строковое свойство, которое имеет определенные значения пространства.

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" }

Из всех ценностей уникальные предметы V1., V2., V3., V4., V5..

Общее количество уникальных предметов 5.

Есть ли решение, возможно, используя LINQ, который возвращает либо только уникальные значения, либо возвращает количество уникальных значений?

Это было полезно?

Решение

Да, с 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();

Другие советы

Метод выражения запроса

var query = (from arr in array
             from value in arr
             select value).Distinct();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top