Skip to content

Instantly share code, notes, and snippets.

@marcinnajder
Created November 26, 2022 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcinnajder/eda58fd27096d765784c9352a71a9083 to your computer and use it in GitHub Desktop.
Save marcinnajder/eda58fd27096d765784c9352a71a9083 to your computer and use it in GitHub Desktop.
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