簡體   English   中英

如何將此字符串轉換為整數數組?

[英]How to convert this string to an array of integers?

我有string s = "158,141,90,86";

如何將它們轉換為int []?

int[] result = "158,141,90,86".Split(',').Select(int.Parse).ToArray();

像這樣,使用LINQ:

int[] array = s.Split(',')
               .Select(x => int.Parse(x))
               .ToArray();

請注意,如果文本的任何元素不是整數,則將引發異常。 如果要使其更具彈性(例如,如果這是用戶輸入的數據),則需要使用int.TryParse ; 那時,就LINQ查詢而言,生活變得更加復雜。

編輯:要使其解析為int?[] (具有與每個無效子字符串相對應的null值),您可以執行以下操作:

int?[] array = s.Split(',')
                .Select(x => { 
                      int value;
                      return int.TryParse(x, out value) ? value : (int?)null;
                 })
                .ToArray();

就像我說的那樣,這不是很好:

編輯:在評論中,丹評論了對上述方法的“痴迷”,而不是(大概)一種更必要的方法。 在我看來,即使是較不愉快的第二個版本,也比命令性替代版本更易於閱讀。 丑陋僅僅是由於int.TryParse的丑陋特性,在命令式代碼中使用時同樣丑陋。

如果int.TryParse要么返回int? Tuple<bool, int>那么它將與第一個版本一樣簡單。 即使從元組形式轉換為可為空的形式也將很簡單,並帶有一個額外的投影:

int[] array = s.Split(',')
               .Select(x => int.TryParseTuple(x))
               .Select(tuple => tuple.First ? tuple.Second : (int?) null)
               .ToArray();

當務之急的解決方案當然是:

        string[] sa = s.Split(',');
        int?[] array = new int?[sa.Length];
        int value;
        for (int i = 0; i < sa.Length; i++)
            if (int.TryParse(sa[i], out value))
                array[i] = value;
            else
                array[i] = null;

LINQ / int?[]的另一種解決方案是:

return source.Split(',') 
                .Select(x => {  
                      int? value = null; 
                      int parsed;
                      if (int.TryParse(x, out parsed)) {
                          value = parsed;
                      }
                      return value; 
                 }) 
                .ToArray();

暫無
暫無

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

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