Created
November 26, 2022 16:18
-
-
Save marcinnajder/eda58fd27096d765784c9352a71a9083 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Program | |
{ | |
static void ExecuteAcionNTimes(int n, Action<int> cosDoZrobienia) | |
{ | |
for (int i = 0; i < n; i++) | |
{ | |
cosDoZrobienia.Invoke(i); | |
} | |
} | |
static bool Exists<T>(List<T> elementy, Func<T, bool> warunek) | |
{ | |
foreach (var element in elementy) | |
{ | |
if (warunek(element) == true) | |
{ | |
return true; | |
} | |
} | |
return false; | |
} | |
static T Find<T>(List<T> elementy, Func<T, bool> warunek) | |
{ | |
foreach (var element in elementy) | |
{ | |
if (warunek(element)) | |
{ | |
return element; | |
} | |
} | |
return default(T); | |
} | |
static List<R> Zip<T1, T2, R>(List<T1> list1, List<T2> list2, Func<T1, T2, R> konwerter) | |
{ | |
List<R> wynik = new List<R>(); | |
var min = Math.Min(list1.Count, list2.Count); | |
for (int i = 0; i < min; i++) | |
{ | |
wynik.Add(konwerter(list1[i], list2[i])); | |
} | |
return wynik; | |
} | |
static List<T> FindAll<T>(List<T> items, Func<T, bool> predicate) | |
{ | |
var result = new List<T>(); | |
foreach (var item in items) | |
{ | |
if (predicate(item)) | |
{ | |
result.Add(item); | |
} | |
} | |
return result; | |
} | |
static List<T> FindAll<T>(List<T> items, Func<T, int, bool> predicate) | |
{ | |
var result = new List<T>(); | |
int i = 0; | |
foreach (var item in items) | |
{ | |
if (predicate(item, i++)) | |
{ | |
result.Add(item); | |
} | |
} | |
return result; | |
} | |
static List<R> ConvertAll<T, R>(List<T> items, Func<T, R> converter) | |
{ | |
var result = new List<R>(); | |
foreach (var item in items) | |
{ | |
result.Add(converter(item)); | |
} | |
return result; | |
} | |
static List<R> ConvertAll<T, R>(List<T> items, Func<T, int, R> converter) | |
{ | |
var result = new List<R>(); | |
int i = 0; | |
foreach (var item in items) | |
{ | |
result.Add(converter(item, i++)); | |
} | |
return result; | |
} | |
static void ForEach<T>(List<T> items, Action<T> action) | |
{ | |
foreach (var item in items) | |
{ | |
action(item); | |
} | |
} | |
static A Fold<T, A>(List<T> items, A seed, Func<A, T, A> aggregator) | |
{ | |
A total = seed; | |
foreach (var item in items) | |
{ | |
total = aggregator(total, item); | |
} | |
return total; | |
} | |
static List<R> Collect<T, R>(List<T> osoby, Func<T, List<R>> f) | |
{ | |
var result = new List<R>(); | |
foreach (var osoba in osoby) | |
{ | |
result.AddRange(f(osoba)); | |
} | |
return result; | |
} | |
class Osoba | |
{ | |
public int Id { get; set; } | |
public string Name { get; set; } | |
public List<Adres> Adresy { get; set; } | |
} | |
class Adres | |
{ | |
public string City { get; set; } | |
} | |
static void Main(String[] args) | |
{ | |
var osoby = new List<Osoba> | |
{ | |
new Osoba() | |
{ | |
Id = 1, | |
Name = "Marcin", | |
Adresy = new List<Adres> | |
{ | |
new Adres { City = "Wroclaw"} , | |
new Adres { City = "Krakow"} | |
} | |
}, | |
new Osoba() { | |
Id = 2, | |
Name = "Gosia", | |
Adresy = new List<Adres> | |
{ | |
new Adres { City = "Warszawa"} , | |
}} | |
}; | |
var aa = Collect(osoby, o => o.Adresy); // Map, Select, ConvertAll | |
var dic = Fold(osoby, new Dictionary<int, Osoba>(), (dic, o) => | |
{ | |
dic.Add(o.Id, o); | |
return dic; | |
}); | |
var a3 = Fold( | |
new List<int> { 1, 2, 3, 4, 66, 7, 8 }, | |
0, | |
(prev, current) => prev + current); | |
// int a = new int[] { 1, 2, 3, 4, 66, 7, 8 }.Aggregate( | |
// 0, (prev, current) => prev + current); | |
// int a2 = new int[] { 1, 2, 3, 4, 66, 7, 8 }.Aggregate( | |
// int.MinValue, | |
// (prev, current) => Math.Max(prev, current)); | |
var names = new List<string>() | |
{ | |
"marcin", "gosia", "janusz", null | |
}; | |
var temp1 = FindAll(names, n => n != null); | |
var temp2 = ConvertAll(temp1, (n, index) => index + ". " + n.Length); | |
ForEach(temp2, Console.WriteLine); | |
// names | |
// .FindAll(n => n != null) // WHERE | |
// .ConvertAll(n => n.Length) // SELECT | |
// .ForEach(x => | |
// { | |
// //todo: ... | |
// }); | |
var datyUrodzenia = new List<DateTime>() | |
{ | |
new DateTime(2000,1,1), | |
new DateTime(2004,1,1), | |
new DateTime(203,1,1) | |
}; | |
} | |
private static void WypiszZeCSharpJestOk(int x) | |
{ | |
Console.WriteLine(" C# jest ok " + x); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment