CSHARP_CI Telegram 1443
🎯 Хитрая задача на C# для продвинутых

Твоя цель — реализовать ленивую фильтрацию по уникальному ключу без LINQ.

Условие:

Есть класс:


class User
{
public string Name { get; set; }
public int Age { get; set; }
}


Нужно написать метод UniqueBy<T, TKey>, который возвращает только уникальные элементы по ключу. Нельзя использовать LINQ (Distinct, GroupBy и т.д.). Метод должен быть ленивым — использовать yield return.

Пример:


var users = new List<User>
{
new User { Name = "Alice", Age = 30 },
new User { Name = "Bob", Age = 25 },
new User { Name = "Alice", Age = 35 },
new User { Name = "Eve", Age = 25 }
};

foreach (var user in UniqueBy(users, u => u.Name))
{
Console.WriteLine($"{user.Name}, {user.Age}");
}
// Вывод:
// Alice, 30
// Bob, 25
// Eve, 25

🧠 Решение:


public static IEnumerable<T> UniqueBy<T, TKey>(IEnumerable<T> source, Func<T, TKey> keySelector)
{
var seen = new HashSet<TKey>();
foreach (var item in source)
{
var key = keySelector(item);
if (seen.Add(key))
yield return item;
}
}


📌 Чем эта задача интересна:
Требует знания HashSet, yield return и замыканий
Работает с любыми коллекциями и даже бесконечными потоками
Часто нужна при фильтрации API-результатов, логов и UI

Ставь лайк, если хочешь больше таких продвинутых C#-задач.



tgoop.com/csharp_ci/1443
Create:
Last Update:

🎯 Хитрая задача на C# для продвинутых

Твоя цель — реализовать ленивую фильтрацию по уникальному ключу без LINQ.

Условие:

Есть класс:


class User
{
public string Name { get; set; }
public int Age { get; set; }
}


Нужно написать метод UniqueBy<T, TKey>, который возвращает только уникальные элементы по ключу. Нельзя использовать LINQ (Distinct, GroupBy и т.д.). Метод должен быть ленивым — использовать yield return.

Пример:


var users = new List<User>
{
new User { Name = "Alice", Age = 30 },
new User { Name = "Bob", Age = 25 },
new User { Name = "Alice", Age = 35 },
new User { Name = "Eve", Age = 25 }
};

foreach (var user in UniqueBy(users, u => u.Name))
{
Console.WriteLine($"{user.Name}, {user.Age}");
}
// Вывод:
// Alice, 30
// Bob, 25
// Eve, 25

🧠 Решение:


public static IEnumerable<T> UniqueBy<T, TKey>(IEnumerable<T> source, Func<T, TKey> keySelector)
{
var seen = new HashSet<TKey>();
foreach (var item in source)
{
var key = keySelector(item);
if (seen.Add(key))
yield return item;
}
}


📌 Чем эта задача интересна:
Требует знания HashSet, yield return и замыканий
Работает с любыми коллекциями и даже бесконечными потоками
Часто нужна при фильтрации API-результатов, логов и UI

Ставь лайк, если хочешь больше таких продвинутых C#-задач.

BY C# (C Sharp) programming


Share with your friend now:
tgoop.com/csharp_ci/1443

View MORE
Open in Telegram


Telegram News

Date: |

When choosing the right name for your Telegram channel, use the language of your target audience. The name must sum up the essence of your channel in 1-3 words. If you’re planning to expand your Telegram audience, it makes sense to incorporate keywords into your name. Users are more open to new information on workdays rather than weekends. The administrator of a telegram group, "Suck Channel," was sentenced to six years and six months in prison for seven counts of incitement yesterday. Judge Hui described Ng as inciting others to “commit a massacre” with three posts teaching people to make “toxic chlorine gas bombs,” target police stations, police quarters and the city’s metro stations. This offence was “rather serious,” the court said. Polls
from us


Telegram C# (C Sharp) programming
FROM American