在字符串数组中找到最短的字符串

时间:2017-06-23 09:54:36

标签: c# string

我需要提供一个解决方案来查找字符串数组中的最短字符串。我想它应该比较每个字符串的长度才能返回。

这就是我被困的地方

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();
}

任何人都可以帮我解决比较部分并解释它

7 个答案:

答案 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);

说明:它将检查该元素的长度是否等于整个集合中的最小长度。

编辑:

  

任何人都可以帮我解决比较部分并解释它

要比较字符串的长度,请使用Length属性和==运算符。当然,你也可以像ChoockY一样循环播放。

答案 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;
}

这些变量名不好。您需要改进它们。