簡體   English   中英

字符串數組中的C#max()並不總是最大數

[英]C# max() from string array not always biggest number

這是有關編譯器/語言如何處理此問題的問題。 采取以下代碼:

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。

我知道使用循環有更好/更簡單/不同的方式來做到這一點。 我完全不知道編譯器如何處理這些字符串以確定輸出。 有人可以解釋嗎? 或提供給我參考以進行查找?

“ max”字符串是按字典順序排列的最后一個字符串,即您在字典中列出它們的順序

如果需要最大數值,則需要使用例如int.Parse將字符串轉換為數字類型。

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

而是執行此操作,使用Split()擴展方法將字符串拆分為數組,然后使用MAX()函數以LINQ中可用的通用序列返回最大值

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

輸出:

highest is: 55

您需要將數字與列表或數組中的整數進行比較。

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

您可以執行以下操作,使用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);

我嘗試用相同的輸入來編譯您的代碼。 我也得到了相同的輸出,但是我想當您嘗試在字符串數組上執行.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();

像所有其他答案一樣,您需要將字符串數組轉換為整數數組,然后應用它。

有關編譯器如何處理這些字符串以確定輸出的答案

由於這些是字符串,因此將檢查字符串是否相等。 編譯器獲取每個字符串值,並將其與一個字符一個一個地比較。 在首次出現不匹配時推論相等性 (例如,在55與6中,5小於6,因此55小於6)

您可以使用:

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

您也可以這樣做:

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

將Var更改為Int64

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM