[英]How to get only the numbers from a string array?
我有一個包含數字和單詞的字符串( items
)數組 - 我從一個包含int
和string
值的字典( matches
)中提取它。 我想得到一個數組或我可以循環的東西,它只包含數字,按數字排序,然后在控制台中顯示它們。
通過使用正則表達式,我可以很容易地為單個字符串執行此操作,但是當我有一個字符串數組時,我不知道該怎么做。
下面的代碼,見評論:
var matches = new Dictionary<int, string>();
matches.Add(1, "value1");
matches.Add(2, "value5");
matches.Add(3, "value2");
var items = matches.Values.ToArray();
Array.Sort(items, StringComparer.CurrentCulture);
Regex rgx = new Regex(@"\D");
rgx.Replace(items, ""); //This doesn't work with arrays!
int[] numbers = Array.ConvertAll(items, s => int.Parse(s)); //This doesn't work because my strings still contain letters
foreach (int c in numbers)
{
Console.WriteLine(string.Format("Number is {0}", c));
Console.ReadKey();
}
期望的輸出是:
Number is 1
Number is 5
Number is 2
如果不明顯,這些數字來自value1
、 value5
和value2
。
您可以使用 LINQ 來完成。 該表達式非常具有聲明性且不言自明:
// we're searching for digits, not removing non-digits as in your example
Regex regex = new Regex(@"\d+");
var results = matches.Values
.Select(v => regex.Match(v)) // do regex on each item
.Where(m => m.Success) // select only those results where regex worked
.Select(m => int.Parse(m.Value)) // convert to int
.ToList(); // convert the results to a list - if you want to sort it
// you wanted to sort the list, right?
results.Sort();
foreach (int number in results)
{
Console.WriteLine($"Number is {number}");
}
用List<T>
而不是 Array 來做這件事會讓事情變得更容易!
var matches = new Dictionary<int, string>();
matches.Add(1, "value1");
matches.Add(2, "value5");
matches.Add(3, "value2");
var items = matches.Values.ToList();
items.Sort( StringComparer.CurrentCulture);
Regex rgx = new Regex(@"\D");
var numbers = items.Select(i => int.Parse(rgx.Replace(i, "")));
foreach (int c in numbers)
{
Console.WriteLine(string.Format($"Number is {c}"));
}
這是一個使用 Regex 的示例:
string[] input = { "Number is 1", "Number is 5", "Number is 2" };
string pattern = @"\d+";
int[] results = input.Select(x => Regex.Match(x, pattern)).Cast<Match>().Select(x => int.Parse(x.Value)).ToArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.