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

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

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

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, который возвращает или только уникальные значения или возвращает количество уникальных значений?

5
задан David 4 April 2010 в 23:15
поделиться

2 ответа

Да, с LINQ это довольно просто. Сначала используйте SelectMany , чтобы сгладить зубчатый массив в IEnumerable , содержащий все значения, а затем вызовите Distinct , чтобы выбрать только уникальные значения:

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

Если вы хотите подсчитать их, тогда используйте Count :

IEnumerable<string> uniqueValues = array.SelectMany(x => x).Distinct();
int uniqueCount = uniqueValues.Count();
8
ответ дан 18 December 2019 в 14:44
поделиться

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

var query = (from arr in array
             from value in arr
             select value).Distinct();
5
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: