Удаление дубликатов из массива с помощью C # .NET 4.0 LINQ? - PullRequest
3 голосов
/ 24 февраля 2011

У меня есть этот код c #, который строит строку с разделением запятыми для службы:

for (m = r.Match(site); m.Success; m = m.NextMatch())
{
     found = found + "," + m.Value.Replace(",", "");
}
return found;

Вывод выглядит так: aaa, bbb, ccc, aaa, 111,111, ccc

Теперь этот код находится на .NET 4.0 Как я могу использовать C # LINQ для удаления дубликатов?

Также, есть ли способ удалить дубликаты без изменения порядка?

Я нашел этот пример кода в другом посте, но не уверен, как именно его применить:

int[] s = { 1, 2, 3, 3, 4}; 
int[] q = s.Distinct().ToArray(); 

Спасибо.

Ответы [ 5 ]

6 голосов
/ 24 февраля 2011
string[] s = found.Split(',').Distinct().ToArray()
4 голосов
/ 24 февраля 2011

это может быть одним из возможных решений:

var data = new List<string>();
for (m = r.Match(site); m.Success; m = m.NextMatch())
  data.Add(m.Value.Replace(",", ""));
return String.Join(",", data.Distinct().ToArray());
4 голосов
/ 24 февраля 2011

Будет возвращена строка значений, разделенных запятыми, без дубликатов:

var result = string.Join(",",
    r.Matches(site)
        .Cast<Match>()
        .Select(m => m.Value.Replace(",", string.Empty))
        .Distinct()
    );
4 голосов
/ 24 февраля 2011

Перепишите код, который строит результат, чтобы вывести его напрямую.

т.е.перепишите это:

for (m = r.Match(site); m.Success; m = m.NextMatch())
{
     found = found + "," + m.Value.Replace(",", "");
}
return found;

К этому:

return (from Match m in r.Matches(site)
        select m.Value.Replace(",", "")).Distinct().ToArray();

Это вернет массив.Если вы все еще хотите вернуть его в виде строки:

return string.Join(", ", (from Match m in r.Matches(site)
        select m.Value.Replace(",", "")).Distinct().ToArray());

Вы можете или не сможете удалить последний .ToArray() из последнего кода в зависимости от версии среды выполнения .NET..NET 4.0 string.Join(...) может принимать IEnumerable<string>, тогда как для предыдущих версий требуется массив.

0 голосов
/ 12 июля 2013

Вы можете достичь этого в одном запросе LINQ

string strSentence = "aaa,bbb,ccc,aaa,111,111,ccc";
List<string> results = (from w in strSentence.Split(',') select w).Distinct().ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...