如何提取现有数组中元素的片段以生成新数组

时间:2018-09-25 20:53:33

标签: c# arrays

我有一个数组:

string[] arr = new string[2]
arr[0] = "a=01"
arr[1] = "b=02"

我该如何取出这些数字并创建一个新数组来存储它们?我期望的是:

int [] newArr = new int[2]

在newArr内部,有2个元素,一个是'01',另一个是'02',均来自arr。

3 个答案:

答案 0 :(得分:0)

获取一个子字符串,然后解析为int。

var newArr = arr.Select(x=>Int32.Parse(x.Substring(2))).ToArray();

答案 1 :(得分:0)

除了String.Split之外,获得所需结果的另一种方法是在=字符上使用=。假设字符串将始终具有字母和数字格式,并用=分隔,输入字符串中没有其他for (var i = 0; i < arr.Length; i++) { // Split the array item on the `=` character. // This results in an array of two items ("a" and "01" for the first item) var tmp = arr[i].Split('='); // If there are fewer than 2 items in the array, there was not a = // character to split on, so continue to the next item. if (tmp.Length < 2) { continue; } // Try to parse the second item in the tmp array (which is the number // in the provided example input) as an Int32. int num; if (Int32.TryParse(tmp[1], out num)) { // If the parse is succesful, assign the int to the corresponding // index of the new array. newArr[i] = num; } } 个字符。

var newArr = arr.Select(x => Int32.Parse(x.Split('=')[1])).ToArray();

可以像其他答案一样在lambda表达式中将其缩短:

Int32.Parse

如果提供的字符串不是整数,则使用=进行操作会导致异常。这还假定存在一个dplyr字符,并且该字符的右边只有数字。

答案 2 :(得分:0)

正如其他答案所指出的,使用linq非常紧凑。 PM100写道:

var newArr = arr.Select(x=>Int32.Parse(x.Substring(2))).ToArray();

您问x是什么..那个linq语句在概念上等效于:

List<int> nums = new List<int>();
foreach(string x in arr)
  nums.Add(Int32.Parse(x.Substring(2);
var newArr = nums.ToArray();

这并不完全相同,在内部linq可能不使用List,但是它体现了相同的概念-对于字符串数组中的每个元素(称为x),都将其切开,将结果解析为int ,将其添加到集合中,然后将集合转换为数组

有时我认为linq被过度使用;通过直接声明一个int数组的大小为字符串并直接填充它,而不是添加到List或其他集合(后来又转换为int数组)中,可能会获得效率。可以很容易地找到两种风格的支持者。 linq是紧凑的,并且可以处理相对较长的手工构造,例如循环内循环。尽管对于那些不熟悉其阅读方法的人来说不一定很容易解决,但是它确实带来了一定的自我记录方面的代码,因为它使用诸如Any,Where,Distinct之类的英语单词,并且比看循环代码更能传达概念。当测试返回true(Any)或从所有元素构建字典/哈希集并返回(Distinct)时,退出较早