using System;
using System.Collections.Generic;
using System.Linq;
public class Test
{
public static void Main()
{
var minMaxList = new List<Entry>
{
new Entry { Min = 2, Max = 120, FileName = "file1.txt" },
new Entry { Min = 2, Max = 150, FileName = "file2.txt" },
new Entry { Min = 5, Max = 150, FileName = "file3.txt" }
};
var minMaxInfo = minMaxList
.Skip(1)
.Aggregate(
new
{
V = new int[]
{
0, //Index
minMaxList[0].Min, //Min
minMaxList[0].Max //Max
},
MaxIndexes = new List<int> { 0 },
MinIndexes = new List<int> { 0 }
},
(r, t) =>
{
r.V[0]++;
if (t.Min < r.V[1])
{
r.V[1] = t.Min;
r.MinIndexes.Clear();
r.MinIndexes.Add(r.V[0]);
}
else if (t.Min == r.V[1])
{
r.MinIndexes.Add(r.V[0]);
}
if (t.Max > r.V[2])
{
r.V[2] = t.Max;
r.MaxIndexes.Clear();
r.MaxIndexes.Add(r.V[0]);
}
else if (t.Max == r.V[0])
{
r.MaxIndexes.Add(r.V[0]);
}
return r;
});
Console.WriteLine("MaxValue: {0}", minMaxInfo.V[2]);
Console.WriteLine(
"MaxFiles: {0}",
string.Join(", ", minMaxInfo.MaxIndexes.Select(i => minMaxList[i].FileName)));
Console.WriteLine("MinValue: {0}", minMaxInfo.V[1]);
Console.WriteLine(
"MinFiles: {0}",
string.Join(", ", minMaxInfo.MinIndexes.Select(i => minMaxList[i].FileName)));
}
}
struct Entry
{
public int Min;
public int Max;
public string FileName;
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CglwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCgl7CgkJdmFyIG1pbk1heExpc3QgPSBuZXcgTGlzdDxFbnRyeT4KCQl7CgkJCW5ldyBFbnRyeSB7IE1pbiA9IDIsIE1heCA9IDEyMCwgRmlsZU5hbWUgPSAiZmlsZTEudHh0IiB9LAoJCQluZXcgRW50cnkgeyBNaW4gPSAyLCBNYXggPSAxNTAsIEZpbGVOYW1lID0gImZpbGUyLnR4dCIgfSwKCQkJbmV3IEVudHJ5IHsgTWluID0gNSwgTWF4ID0gMTUwLCBGaWxlTmFtZSA9ICJmaWxlMy50eHQiIH0KCQl9OwoJCQoJCXZhciBtaW5NYXhJbmZvID0gbWluTWF4TGlzdAogICAgICAgIAkuU2tpcCgxKQogICAgICAgIAkuQWdncmVnYXRlKAogICAgICAgICAgICAJbmV3CgkJICAgICAgICAgICAgeyAKCQkgICAgICAgICAgICAgICAgViA9IG5ldyBpbnRbXSAKCQkgICAgICAgICAgICAgICAgICAgIHsKCQkgICAgICAgICAgICAgICAgICAgIAkwLCAvL0luZGV4CgkJICAgICAgICAgICAgICAgICAgICAJbWluTWF4TGlzdFswXS5NaW4sIC8vTWluCgkJICAgICAgICAgICAgICAgICAgICAJbWluTWF4TGlzdFswXS5NYXggLy9NYXgKCQkgICAgICAgICAgICAgICAgICAgIH0sCgkJICAgICAgICAgICAgICAgIE1heEluZGV4ZXMgPSBuZXcgTGlzdDxpbnQ+IHsgMCB9LAoJCSAgICAgICAgICAgICAgICBNaW5JbmRleGVzID0gbmV3IExpc3Q8aW50PiB7IDAgfQoJCSAgICAgICAgICAgIH0sCgkJICAgICAgICAgICAgKHIsIHQpID0+CgkJICAgICAgICAgICAgewoJCSAgICAgICAgICAgIAlyLlZbMF0rKzsKCQkgICAgICAgICAgICAJCgkJICAgICAgICAgICAgICAgIGlmICh0Lk1pbiA8IHIuVlsxXSkKCQkgICAgICAgICAgICAgICAgewoJCSAgICAgICAgICAgICAgICAgICByLlZbMV0gPSB0Lk1pbjsKCQkgICAgICAgICAgICAgICAgICAgci5NaW5JbmRleGVzLkNsZWFyKCk7CgkJICAgICAgICAgICAgICAgICAgIHIuTWluSW5kZXhlcy5BZGQoci5WWzBdKTsKCQkgICAgICAgICAgICAgICAgfSAKCQkgICAgICAgICAgICAgICAgZWxzZSBpZiAodC5NaW4gPT0gci5WWzFdKQoJCSAgICAgICAgICAgICAgICB7CgkJICAgICAgICAgICAgICAgICAgIHIuTWluSW5kZXhlcy5BZGQoci5WWzBdKTsJCgkJICAgICAgICAgICAgICAgIH0KCQkKCQkgICAgICAgICAgICAgICAgaWYgKHQuTWF4ID4gci5WWzJdKQoJCSAgICAgICAgICAgICAgICB7CgkJICAgICAgICAgICAgICAgICAgIHIuVlsyXSA9IHQuTWF4OwoJCSAgICAgICAgICAgICAgICAgICByLk1heEluZGV4ZXMuQ2xlYXIoKTsKCQkgICAgICAgICAgICAgICAgICAgci5NYXhJbmRleGVzLkFkZChyLlZbMF0pOwoJCSAgICAgICAgICAgICAgICB9CgkJICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQuTWF4ID09IHIuVlswXSkKCQkgICAgICAgICAgICAgICAgewoJCSAgICAgICAgICAgICAgICAgICByLk1heEluZGV4ZXMuQWRkKHIuVlswXSk7CgkJICAgICAgICAgICAgICAgIH0KCQkKCQkgICAgICAgICAgICAgICAgcmV0dXJuIHI7CgkJICAgICAgICAgICAgfSk7CiAgICAKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiTWF4VmFsdWU6IHswfSIsIG1pbk1heEluZm8uVlsyXSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoCiAgICAgICAgCSJNYXhGaWxlczogezB9IiwKICAgICAgICAJc3RyaW5nLkpvaW4oIiwgIiwgbWluTWF4SW5mby5NYXhJbmRleGVzLlNlbGVjdChpID0+IG1pbk1heExpc3RbaV0uRmlsZU5hbWUpKSk7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoIk1pblZhbHVlOiB7MH0iLCBtaW5NYXhJbmZvLlZbMV0pOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKAogICAgICAgIAkiTWluRmlsZXM6IHswfSIsCiAgICAgICAgCXN0cmluZy5Kb2luKCIsICIsIG1pbk1heEluZm8uTWluSW5kZXhlcy5TZWxlY3QoaSA9PiBtaW5NYXhMaXN0W2ldLkZpbGVOYW1lKSkpOwoJfQp9CgpzdHJ1Y3QgRW50cnkKewoJcHVibGljIGludCBNaW47CglwdWJsaWMgaW50IE1heDsKCXB1YmxpYyBzdHJpbmcgRmlsZU5hbWU7Cn0=