我有一个名为entry的对象。它在float中有min和max,在string中有fileName。这些对象存储在列表中
List<Entry> minMaxList = new List<Entry>();
我需要找到一个具有最高值且最小值及其文件名的对象。
所以,如果我有这样的数组
Entry1 Entry2 Entry3
min max filename min max filename min max filename
| 2 | 120 | file1.txt | | 2 | 150 | file1.txt | | 5 | 150 | file1.txt |
我想得到具有最低值的对象是Entry1和Entry2,具有最高值的对象是Entry2和Entry3
我试过了:
var max = minMaxList.Max(r => r.getMax())
效果很好,但它返回一个值,没有任何关于它来自何处的其他信息。我需要整个对象,或者至少需要这个值的文件名。我想知道它是否可以在一个命令中完成,或者我是否必须再次迭代列表并根据之前选择的最小值和最大值找到所有条目。
答案 0 :(得分:4)
您始终可以过滤可枚举,而不是仅通过以下内容来使用最大值:
var maxvalue = minMaxList.Max(w => w.getMax());
var maxitems = minmaxlist.Where(w => w.getMax() == maxvalue);
答案 1 :(得分:1)
您已经关闭了,您只需要添加一个找到匹配项的过滤器:
var max = minMaxList.Max(r => r.getMax())
var itemsWithMax = minMaxList.Where(r => r.getMax() == max);
与Min
类似。
我想知道是否可以在一个命令中完成
可能使用复杂的分组或连接,但我会首先获得的工作,然后尝试使其更好(记住单个查询并不总是“比多次查询更好。
答案 2 :(得分:1)
你问的是解决这个问题的最有效方法。
确定最大/最小值并在之后搜索这些项需要迭代列表两次。我会在一个循环中手动解决它
List<Entry> ResultList = new List<Entry>();
ResultList.Add(minMaxList[0]);
foreach (Entry item in minMaxList)
{
if (item.getMax() >= ResultList[0].getMax())
{
if (item.getMax() != ResultList[0].getMax())
{
ResultList.Clear();
}
ResultList.Add(item);
}
}
答案 3 :(得分:0)
尝试使用以下组:
var inputTimer;
var otherTimer;
...
答案 4 :(得分:0)
我发现这是最短的方法。
var newList = new List<Hero>();
var maxValue = newList.OrderByDescending(x => x.Level).ToList()[0];
答案 5 :(得分:-1)
你去,就像这样。
允许您在列表的一个枚举中找到最小值和最大值,这可能比多次枚举列表更快,就像在其他答案中一样。
我对使用单个元素数组来存储值并不完全满意,但它们使种子的值类型属性变得可变。这避免了不断重新分配聚合的需要。
var minMaxInfo = minMaxList.Skip(1)
.Aggregate(
new
{
Max = new int[] { minMaxList[0].Max },
MaxIndexes = new List<int> { 0 },
Min = new int[] { minMaxList[0].Min },
MinIndexes = new List<int> { 0 },
Index = new int[] { 0 }
},
(r, t) =>
{
r.Index[0]++;
if (t.Min < r.Min[0])
{
r.Min[0] = t.Min;
r.MinIndexes.Clear();
r.MinIndexes.Add(r.Index[0]);
}
else if (t.Min == r.Min[0])
{
r.MinIndexes.Add(r.Index[0]);
}
if (t.Max > r.Max[0])
{
r.Max[0] = t.Max;
r.MaxIndexes.Clear();
r.MaxIndexes.Add(r.Index[0]);
}
else if (t.Max == r.Max[0])
{
r.MaxIndexes.Add(r.Index[0]);
}
return r;
});
允许,
Console.WriteLine("MaxValue: {0}", minMaxInfo.Max[0]);
Console.WriteLine(
"MaxFiles: {0}",
string.Join(
", ",
minMaxInfo.MaxIndexes.Select(i => minMaxList[i].FileName)));
Console.WriteLine("MinValue: {0}", minMaxInfo.Min[0]);
Console.WriteLine(
"MinFiles: {0}",
string.Join(
", ",
minMaxInfo.MinIndexes.Select(i => minMaxList[i].FileName)));