[英]Extract Number from string arrays
我有一个字符串数组,并且这些字符串包含不同类型的字符串,我想将这些值分成2个不同的数组。
string[] arr = { "12" , "34-2-2" , "xyz" , "33" , "56-3-4" , "45-4" }
现在我想要linq查询,它在一个数组中给出“ 12”,“ 33”,在另一个数组中给出“ 34-2-2”,“ 56-3-4”。 其余的值将被忽略。
var _cust= DbContext.Customer.AsQueryable();
这将包含Id(Int32),并且在此我想添加查询,如果客户具有“ 12”,则返回该查询,“ 33”将返回该结果。
var _cont = DbContext.Contacts.AsQueryable();
这将包含DisplayId(字符串),并且在此我想添加查询,如果客户具有“ 34-2-2”,则返回该查询,“ 56-3-4”将返回该结果。
如何为此编写linq查询?
您可以使用带有正则表达式的linq来解决此问题。
string[] arr = {"12", "34-2-2", "xyz", "33", "56-3-4", "45-4"};
var first = arr.Where(v => Regex.IsMatch(v, @"^\d+$")).ToArray();
var second = arr.Where(v => Regex.IsMatch(v, @"^\d+-\d+-\d+$")).ToArray();
Console.WriteLine(string.Join(" ", first));
Console.WriteLine(string.Join(" ", second));
这是按照您描述的解决方案。 它不使用正则表达式。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp3
{
class Program
{
static readonly char[] digits = "0123456789".ToCharArray();
static void Main(string[] args)
{
string[] arr = { "12", "34-2-2", "xyz", "33", "56-3-4", "45-4" };
var pair = ProcessInput(arr);
Console.WriteLine(String.Join(", ", pair.Item1));
Console.WriteLine(String.Join(", ", pair.Item2));
var done = Console.ReadLine();
}
static Tuple<string[], string[]> ProcessInput(string[] input)
{
var l1 = new List<string>();
var l2 = new List<string>();
foreach(var item in input)
{
if (ContainsOnlyIntegers(item))
{
l1.Add(item);
continue; // move on.
}
var parts = item.Split('-');
if (parts.Length == 3 && parts.All(part => ContainsOnlyIntegers(part)))
{
//must have 3 parts, separated by hypens and they are all numbers.
l2.Add(item);
}
}
return Tuple.Create(l1.ToArray(), l2.ToArray());
}
static bool ContainsOnlyIntegers(string input)
{
return input.ToCharArray().All(r => digits.Contains(r));
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.