我需要提供一个解决方案来查找字符串数组中的最短字符串。我想它应该比较每个字符串的长度才能返回。
这就是我被困的地方
static void Main(string[] args)
{
//find the shortest string in an array of string
string[] names = new string[3]{
"Tom", "and", "jerry"
};
foreach(string name in names){
Console.Write(name + ", ");
}
Console.ReadKey();
}
任何人都可以帮我解决比较部分并解释它
答案 0 :(得分:9)
这个将找到第一个最短的字符串而不对集合进行排序:
int minLength = names.Min(y=>y.Length); // this gets you the shortest length of all elements in names
string shortest = names.FirstOrDefault(x=>x.Length == minLength);
说明:它将检查该元素的长度是否等于整个集合中的最小长度。
编辑:
任何人都可以帮我解决比较部分并解释它
答案 1 :(得分:3)
使用LINQ:
var shortestString = names.OrderBy(c => c.Length).FirstOrDefault();
答案 2 :(得分:2)
你可以用linq做到这一点,
var shortestName = names.OrderBy(name => name.Length).FirstOrDefault();
或
string shortestName = names.Aggregate((a1, a2) => a1.Length <a2.Length ? a1 : a2);
答案 3 :(得分:2)
正如其他人所说,您可以使用LINQ。这是完成这项工作最简单的方法,但我认为,你应该学习一些算法。查找数组中的最小值/最大值属于编程基础。
您可以在这里阅读: http://www.stoimen.com/blog/2012/05/21/computer-algorithms-minimum-and-maximum/
纯c#impementation看起来像:
string[] names = new string[3]{
"Tom", "and", "jerry"
};
string minValue = names[0];
foreach (string name in names)
{
if (name.Length < minValue.Length)
{
minValue = name;
}
}
Console.WriteLine(minValue);
答案 4 :(得分:2)
您可以使用MaxBy。请不要对整个序列进行排序以找到最大值。这非常浪费,故意浪费是会导致软件性能下降的癌症。
答案 5 :(得分:0)
也许你可以这样做:
string[] names = new string[3]{
"Tom", "and", "jerry"
};
var query = from n in names select n.Length;
Console.WriteLine("Shortest name: " + names[Array.IndexOf(query.ToArray(), query.ToArray().Min())]);
我希望这对某人有用
答案 6 :(得分:0)
编写自己的Linq,如下所示:
public static T1 Min<T1, T2>(this IEnumerable<T1> source, Func<T1, T2> selector) where T2 : IComparable<T2> {
if (source == null) {
throw new ArgumentNullException(nameof(source));
}
if (selector == null) {
throw new ArgumentNullException(nameof(selector));
}
bool firstIteration = true;
T2 minimum = default;
T1 value = default;
foreach (T1 v in source) {
T2 current = selector.Invoke(v);
if (current == null) {
throw new NullReferenceException();
}
if (firstIteration || current.CompareTo(minimum) < 0) {
minimum = current;
value = v;
firstIteration = false;
}
}
return value;
}
这些变量名不好。您需要改进它们。