Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,12 @@
Console.WriteLine(Utilities.PrintList(filteredContainedInts));
Console.WriteLine();

Console.WriteLine("REMOVEALL");
List<int> intsToChange = [1, 2, 3, 4, 4, 4, 5, 6, 7, 7, 8, 8, 9];
int removedCount = Utilities.RemoveNotContained(intsToChange, filteringIntList);
Console.WriteLine($"Removed {removedCount}, left: {Utilities.PrintList(intsToChange)}");
Console.WriteLine();

Console.WriteLine("DUPLICATES");
Console.WriteLine("Unique elements from list 1 that are contained in list 2:");
filteredContainedInts = Utilities.FilterContainedUnique(intsToFilter, filteringIntList);
Expand Down Expand Up @@ -78,6 +84,13 @@
Console.WriteLine(Utilities.PrintList(filteredStudents));
Console.WriteLine();

Console.WriteLine("INTERSECTBY");
Console.WriteLine(Utilities.PrintList(Utilities.FilterStudentsBySchoolCityUsingIntersectBy(studentsToFilter, schoolsToFilter)));
Console.WriteLine();
Console.WriteLine("JOIN");
Console.WriteLine(Utilities.PrintList(Utilities.FilterStudentsBySchoolCityUsingJoin(studentsToFilter, schoolsToFilter)));
Console.WriteLine();

Console.WriteLine("SPECIFIC PROPERTIES");
List<int> schoolIds = [1, 3];
Console.WriteLine("Names of students from list 1 that attend schools with IDs from list 2:");
Expand All @@ -100,6 +113,11 @@
Console.WriteLine(Utilities.PrintList(filteredContainedInts));
Console.WriteLine();

Console.WriteLine("HASHSET LOOKUP");
Console.WriteLine(Utilities.PrintList(Utilities.FilterContainedUsingHashSetLookup(intsToFilter, filteringIntList)));
Console.WriteLine(Utilities.PrintList(Utilities.FilterContainedUsingHashSetLookup([1, 2, 3, 4, 4, 4, 5, 6, 7, 7, 8, 8, 9], [4, 4, 7, 9, 10])));
Console.WriteLine();

Console.WriteLine("MASKS");
intsToFilter = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
List<bool> mask = [true, false, false, false];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
public class School
{
public int Id { get; set; }
public string City { get; set; }
public string City { get; set; } = string.Empty;
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Name { get; set; } = string.Empty;
public int SchoolId { get; set; }
public string City { get; set; }
public string City { get; set; } = string.Empty;

override public string ToString()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,31 @@ public static List<int> FilterUsingMask(List<int> listToFilter, List<bool> mask)
{
return listToFilter.Where((item, index) => mask[index % mask.Count]).ToList();
}

public static int RemoveNotContained(List<int> listToFilter, List<int> filteringList)
{
return listToFilter.RemoveAll(item => !filteringList.Contains(item));
}

public static List<int> FilterContainedUsingHashSetLookup(List<int> listToFilter, List<int> filteringList)
{
HashSet<int> lookup = filteringList.ToHashSet();

return listToFilter.Where(lookup.Contains).ToList();
}

public static List<Student> FilterStudentsBySchoolCityUsingIntersectBy(List<Student> listToFilter, List<School> filteringList)
{
return listToFilter.IntersectBy(filteringList.Select(school => school.City), student => student.City)
.ToList();
}

public static List<Student> FilterStudentsBySchoolCityUsingJoin(List<Student> listToFilter, List<School> filteringList)
{
return listToFilter.Join(filteringList,
student => student.City,
school => school.City,
(student, school) => student)
.ToList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -231,4 +231,74 @@ public void Given2Lists_WhenFilterUsingMaskMethodCalled_ThenOnlyElementsCorrespo
// Assert
Assert.Equal([50, 7], output);
}
}

[Fact]
public void Given2Lists_WhenRemoveNotContainedMethodCalled_ThenListIsChangedInPlace()
{
// Arrange
List<int> numbers = [17, 34, 50, 68, 121, 7, 145];
List<int> otherNumbers = [50, 44, 121];

// Act
var removed = Utilities.RemoveNotContained(numbers, otherNumbers);

// Assert
Assert.Equal(5, removed);
Assert.Equal([50, 121], numbers);
}

[Fact]
public void Given2Lists_WhenFilterContainedUsingHashSetLookupMethodCalled_ThenOrderAndDuplicatesAreKept()
{
// Arrange
List<int> numbers = [121, 17, 50, 50, 68, 121, 7];
List<int> otherNumbers = [50, 44, 121];

// Act
var output = Utilities.FilterContainedUsingHashSetLookup(numbers, otherNumbers);

// Assert
Assert.Equal([121, 50, 50, 121], output);
}

[Fact]
public void Given2Lists_WhenFilterStudentsBySchoolCityUsingIntersectByMethodCalled_ThenOneStudentPerCityIsKept()
{
// Arrange
List<Student> students =
[
new Student { Id = 1, Name = "Alice", SchoolId = 1, City = "Paris" },
new Student { Id = 2, Name = "Bob", SchoolId = 2, City = "Reims" },
new Student { Id = 5, Name = "Eve", SchoolId = 2, City = "Reims" }
];
List<School> schools = [new School { Id = 1, City = "Paris" }, new School { Id = 2, City = "Reims" }];

// Act
var output = Utilities.FilterStudentsBySchoolCityUsingIntersectBy(students, schools)
.Select(student => student.Name).ToList();

// Assert
Assert.Equal(["Alice", "Bob"], output);
}

[Fact]
public void Given2Lists_WhenFilterStudentsBySchoolCityUsingJoinMethodCalled_ThenEveryMatchingStudentIsKept()
{
// Arrange
List<Student> students =
[
new Student { Id = 1, Name = "Alice", SchoolId = 1, City = "Paris" },
new Student { Id = 2, Name = "Bob", SchoolId = 2, City = "Reims" },
new Student { Id = 3, Name = "Charlie", SchoolId = 1, City = "Calais" },
new Student { Id = 5, Name = "Eve", SchoolId = 2, City = "Reims" }
];
List<School> schools = [new School { Id = 1, City = "Paris" }, new School { Id = 2, City = "Reims" }];

// Act
var output = Utilities.FilterStudentsBySchoolCityUsingJoin(students, schools)
.Select(student => student.Name).ToList();

// Assert
Assert.Equal(["Alice", "Bob", "Eve"], output);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

Expand All @@ -10,13 +10,13 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.5">
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.11.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="4.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.0">
<PackageReference Include="coverlet.collector" Version="10.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down
Loading