C#将生成的数字列表转换为int数组

时间:2016-04-22 20:46:57

标签: c# arrays vector

同样,我是一名离散的数学家,不是编码员,而是试图将C#用于我正在研究的论文并需要一些帮助。

我有一个代码,用于根据用户输入生成一组随机整数,并将它们打印为以逗号分隔的字符串,但需要将它们转换为向量(或int数组?)。我不确定哪个是合适的,但我在网上找不到如何在C#中使用它们。我需要能够将向量函数应用于它们,因此每个条目仍然需要是可识别的和整数,但是向量需要能够根据用户输入而改变大小。

1 个答案:

答案 0 :(得分:4)

如果您已经有逗号分隔的字符串,则可以使用String.Split()方法将其基于逗号分割为数组,然后您可以将这些值中的每一个转换为适当的整数分别使用Int32.Parse()Convert.ToInt32()方法:

// The Split() method will yield an array, then the Select() statement
// will map each string value to it's appropriate integer and finally
// the last ToArray() call will make this into an actual array of integers
var output = input.Split(',').Select(n => Int32.Parse(n)).ToArray(); 

你可以see an example of this in action here。如果需要显式忽略可能的空条目和空格,可以使用以下调整后的示例:

var output = input.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries)
                  .Select(s => Int32.Parse(s.Trim()))
                  .ToArray();

更安全的方法仍然是仅使用可通过Int32.TryParse()方法正确解析为整数的值,如下所示:

// Split your string, removing any empty entries
var output = strings.Split(new char[]{','}, StringSplitOptions.RemoveEmptyEntries)
                    .Select(n => {
                         // A variable to store your value
                         int v;
                         // Attempt to parse it, store an indicator if the parse was
                         // successful (and store the value in your v parameter)
                         var success = Int32.TryParse(n, out v);
                         // Return an object containing your value and if it was successful
                         return new { Number = v, Successful = success };
                    })
                    // Now only select those that were successful
                    .Where(attempt => attempt.Successful)
                    // Grab only the numbers for the successful attempts
                    .Select(attempt => attempt.Number)
                    // Place this into an array
                    .ToArray();