来自字符串数组的C#max()并不总是最大数字

时间:2017-08-09 05:41:29

标签: c# arrays string max

这是关于编译器/语言如何处理这个问题的问题。 请使用以下代码:

Console.WriteLine("Enter some numbers separated by ",");
var numbers = Console.ReadLine();
var splitNumber = numbers.Split(',');
var maxNumber = splitNumber.Max();
Console.WriteLine("highest is: " + maxNumber);

输入一个字符串,如" 1,2,3,4,5"将输出5作为最大数字。 但是,使用" 1,2,3,55,6"输出6.然而," 33,1,4,1" 4.奇怪," 33,1,2,3"给出33。

我知道使用循环有更好/更简单/不同的方式。我完全错过了编译器如何处理这些字符串来确定输出的东西。有人可以解释一下吗?或者提供一个参考来查找它?

9 个答案:

答案 0 :(得分:8)

“max”字符串是字典顺序中的最后一个字符串,即您在字典中列出它们的顺序

您需要使用例如int.Parse,如果你想要数字最大值,你可以将你的字符串转换为数字类型。

答案 1 :(得分:8)

在字符串比较中,6 > 55返回True。

执行此操作,使用Split()扩展方法将字符串拆分为数组,然后使用{em>返回LINQ中可用的通用序列中的最大值的MAX()函数/ p>

string x = "1,2,3,55,6";
var array = x.Split(',');
Console.WriteLine("highest is: " + array.Max(c => int.Parse(c)));

输出:

highest is: 55

答案 2 :(得分:1)

您需要将数字作为列表或数组中的整数进行比较。

var <int> Numbers = new List<int>();
while(String had not ended)
{
    var splitNumber = (int) numbers.Split(',');
    Numbers.Add(splitNumner);
}        
var maxNumber = Numbers.Max();        
Console.WriteLine("highest is: " + maxNumber);

答案 3 :(得分:1)

你可以这样做,使用ConvertAll将字符串数组转换为int数组,然后找到最大值

    Console.WriteLine("Enter some numbers separated by ");
    var numbers = Console.ReadLine();
    var splitNumber = numbers.Split(',');
    int[] myInts = Array.ConvertAll(splitNumber, int.Parse);
    var maxNumber = myInts.Max();
    Console.WriteLine("highest is: " + maxNumber);

答案 4 :(得分:1)

我尝试使用相同的输入编译代码。我也得到相同的输出,但是当你尝试在字符串数组上执行.Max()操作时,它只是比较第二个数组中每个条目的第一个字符。

如果输入为 1,2,3,55,6 ,您将获得 6 的输出,因为当您比较所有数字并且第一个数字<强> 6 是最大的。但是,如果您将输入更改为 1,2,3,75,6 ,那么您将获得 75 的输出,因为 7 是列表中所有数字的最大第一位数。

string str = "1,2,3,75,6";
var splitNumber = str.Split(',');
var maxNumber = splitNumber.Max();

与所有其他答案一样,您需要将字符串数组转换为整数数组,然后应用它。

答案 5 :(得分:1)

答案编译器如何处理这些字符串以确定输出?

由于这些是字符串,因此会检查字符串相等性。 编译器获取每个字符串值并将其与逐个char进行比较。它在第一次出现错配时推断出相等(例如,55对6,5,小于6,因此55小于6)

答案 6 :(得分:1)

您可以使用:

Console.WriteLine("Enter a series of number separated by comma and I will tell you which one is the biggest, cool!");
var input = Console.ReadLine().Split(',');
Console.WriteLine("Biggest is :" + input.Max(c => int.Parse(c)));

答案 7 :(得分:0)

你也可以这样做:

var splitNumber = numbers.Split(',').Select(c=>Convert.ToInt32(c)).Max();
Console.WriteLine("highest is: " + splitNumber);

答案 8 :(得分:0)

将Var更改为Int64

Int64 maxNumber = Int64.Parse(splitNumber.Max());