[英]How to out all the int values from a string array and store that int values in another array
字符串数组中有单词和 int 值。 我的目标是从另一个数组中检索 int 值。 我已经看到了两种从字符串数组转换和查找 int 值的方法。
要从字符串中获取所有 int 值,我首先创建另一个 int 数组并使用 Array.ConvertAll init。 第二种方法是循环通过isDigit()。
现在,问题是我找不到将值存储在已转换为 int 的 int 数组中的方法。 最终目标是从转换后的值中找到最小值和最大值。
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
int result;
int[] num = Array.ConvertAll(strArray1, x =>
{
bool convertStrIntoInt = int.TryParse(x, out int result);
return result;
});
在这里,我不知道如何得到它之外的结果来进行排序以找到最小值和最大值。
我不明白你想要什么,但如果你只想要 int 那就用这个
List<int> list = new List<int>();
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
foreach (string str in strArray1)
{
if (int.TryParse(str, out int val))
{
list.Add(val);
}
}
int[] vs = list.ToArray();
现在所有的 int 值都存储在 vs 数组中,如果有一些包含 int 值的单词并且您希望它们被提取,您也可以使用正则表达式来查找单词中的数字
您可以尝试如下正则Regex
:
string[] strArray1 = {"Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109"};
int[] num = strArray1.Where(v => Regex.IsMatch(v, @"^\d+$")).Select(int.Parse).ToArray();
int min = num.Min();
int max = num.Max();
由于您不想使用Regex
,您可以 go 使用您的解决方案,只需进行小修改即可获得所需的结果。 尝试这个:
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
int[] num = Array.ConvertAll(strArray1, x =>
{
bool convertStrIntoInt = int.TryParse(x, out int result);
return result;
}).Where(x => x > 0).ToArray();
int max = num.OrderByDescending(c => c).ToArray()[0];
int min = num.OrderBy(c => c).ToArray()[0];
小的优化解决方案可能如下所示
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
var numArray = strArray1.Where(var=> new Regex(@"^\d+").IsMatch(var)).ToArray();
var res = Array.ConvertAll(numArray,s => int.Parse(s));
如果我们不想使用正则表达式可以尝试如下
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
int testNum;
var numArray = strArray1.Where(var=> int.TryParse(var,out testNum)).ToArray();
var res = Array.ConvertAll(numArray,s => int.Parse(s));
然后,您可以使用获取最大值和最小值
res.Min(), res.Max()
这应该为您的问题提供一个起点
这是将字符串数组中的 int 值转换为 int 数组的另一种方法。
在dotnetfiddle上试试。
public static class Extensions
{
public static int[] ToIntegerArray(this string[] sender)
{
var intArray = Array
.ConvertAll(sender,
(input) => new {
IsInteger = int.TryParse(input, out var integerValue),
Value = integerValue
})
.Where(result => result.IsInteger)
.Select(result => result.Value)
.ToArray();
return intArray;
}
}
利用
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
int[] intArray = strArray1.ToIntegerArray();
Array.Sort(intArray);
foreach (var value in intArray)
{
Console.WriteLine(value);
}
Console.WriteLine($"Min: {intArray.Min()}");
Console.WriteLine($"Max: {intArray.Max()}");
针对您的初始问题:
我不 [知道] 如何在它之外获取结果以进行排序以找到最小值和最大值。
使用带有“正常” int
的ConvertAll()
,您根本无法为您的问题获得完整的解决方案。
因此,如果我们看一下您的结果:
int[] num = Array.ConvertAll(strArray1, x =>
{
bool convertStrIntoInt = int.TryParse(x, out int result);
return result;
});
// num: int[8] { 0, 99, 0, 3, 0, 12, 0, 109 }
我们可以看到每个string
都会产生0
,因为如果解析失败,将返回0
- 请参阅: Int32.TryParse(...)
。 因此,无法区分输入中的真实0
或字符串。
但是我们可以通过使用Nullable<int>
/ int?
int?[] num = Array.ConvertAll(strArray1, x =>
{
return (int?)( int.TryParse(x, out int result) ? result : null);
});
// num: Nullable<int>[8] { null, 99, null, 3, null, 12, null, 109 }
因此,我们可以区分0
和字符串 - 由null
表示。
现在您可以执行其他操作,例如num.Max()
和num.Min()
。 如果您需要一个int[]
数组,则必须运行更多循环。
int[] num = Array.ConvertAll(strArray1, x =>
{
return (int?)( int.TryParse(x, out int result) ? result : null);
}).OfType<int>().ToArray();
//num: int[4] { 99, 3, 12, 109 }
所以这不是很理想。
我的解决方案是一个简单的循环。
// Your intput
string[] strArray1 = { "Bautik", "99", "Sagar", "3", "Tisha", "12", "Riya", "109" };
// Output Variables
List<int> result = new();
int min = int.MaxValue;
int max = int.MinValue;
// Loop
foreach( string item in strArray1)
{
if(int.TryParse(item, out int value))
{
result.Add(value);
min = min > value ? value : min;
max = max < value ? value : max;
}
}
// Output
// result: int[4] { 99, 3, 12, 109 }
// min: 3
// max: 109
正如Gian Paolo在这个答案的评论中已经提到的那样
使用
List<int>
比使用int[]
容易得多
...,但如果你真的需要一个数组,那么你可以调用ToArray()
。
int[] resultArray = result.ToArray();
这导致int[4] { 99, 3, 12, 109 }
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.