【问题标题】:c# why min and max methods doesn't work correctlyc# 为什么 min 和 max 方法不能正常工作
【发布时间】:2017-09-22 05:24:29
【问题描述】:

得到 .txt 文件:

pasaulyje jau nuo XVI a. pradžios. Lorem Ipsu
atsitiktine tvarka išdėliojo raides aaaaaaaaaaaaaa aaaaaaaa aaa
atspaudų prese ir
qqqqqqqqqqqqqqqqqqqqqqqqqqqq

这是我的代码 sn-p:

string max = tekstas.Max();
string min = tekstas.Min();

Console.WriteLine(max);
Console.WriteLine(min);

为什么 Max() 方法给了我最后一行(因为它是最短的,实际上不是)和 Min() 方法给了我的第二行,这是正确的如果我用 Max 方法问...所以我做错了什么?

【问题讨论】:

  • 变量 tekstas 是什么类型?
  • 如何定义“最大”和“最小”。我猜它对第一个字母使用字母顺序。
  • @earloc , 字符串类型
  • 没关系,看看两个有效的答案;)
  • @earloc 是的,还是谢谢 :)

标签: c# methods max min


【解决方案1】:

如果Length 是你可以做的最小值或最大值的标准

var max = tekstas.Max(x => x.Length);
var min = tekstas.Min(x => x.Length);

var maxLengthString = tekstas.Where(x => x.Length == max);
var minLengthString = tekstas.Where(x => x.Length == min);

虽然您可以对其进行一些重构,例如获得 First occurrence,但您需要 FirstOrDefault

【讨论】:

  • 这将返回大小,而不是字符串本身,不是吗?
  • @Pikoh:谢谢。
  • 欢迎。现在就好了:)
【解决方案2】:

String 上的 Min 和 Max 使用字母排序...所以这种行为是意料之中的。

如果您想按长度获取最大值和最小值,您可以执行以下操作;

string maxLength = tekstas.Select(s => s.Length).Max();
string minLength = tekstas.Select(s => s.Length).Min();

string maxString = tekstas.First(s => s.Length == maxLength);
string minString = tekstas.First(s => s.Length == minLength);

Console.WriteLine(maxString );
Console.WriteLine(minString );

【讨论】:

  • 感谢队友,终于得到了答案,所以在寻找单词时我应该更好地使用 min 和 max 方法吗?甚至是单词中的字母?但不是最长的线?
  • Min 和 Max 适用于您调用它们的任何数据类型,因此如果您在字符串(即一行文本或文本单词)上使用,它将按字母顺序排序并返回最高(最接近Z)或最低(最接近 A)。如果您在数字上使用(如字符串的长度),那么它将返回最低/最高数字。然后您需要找到具有该长度的字符串,因为它返回数字(长度)
  • 感谢您的努力 :) 会按正确答案,当我可以时
猜你喜欢
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-01
  • 1970-01-01
  • 2013-05-21
  • 2012-08-26
相关资源
最近更新 更多