我有两个整数,例如4和11,并且我有一个字符串,例如Month04
我希望能够将该字符串与11到4之间的数字范围进行比较。
因此,以其他方式产生的循环(如果Month04.contains(11,10,9,8,7,6,5,4)然后
我该如何优雅地解决?
致谢
答案 0 :(得分:2)
您可以使用any()
检查字符串中是否存在数字,并使用Enumerable.Range()
创建数字列表
string month = "Month04";
int num1 = 4;
int num2 = 11;
IEnumerable<int> numbersList = Enumerable.Range(num1, num2 - num1 + 1) ;
if (numbersList.Any(x => month.Contains(x.ToString())))
{
// then
}
答案 1 :(得分:1)
我建议您为此创建一个通用方法:
public static bool CheckNameInRangeOfIntegers(int lowerBound, int upperBound, string inputString)
{
List<int> rangeOfIntegers=Enumerable.Range(lowerBound,(upperBound-lowerBound + 1)).ToList();
return rangeOfIntegers.Any(x=>inputString.Contains(x.ToString()));
}
Example可以称为:
Console.WriteLine(CheckNameInRangeOfIntegers(4,11,"Month4")); // true
Console.WriteLine(CheckNameInRangeOfIntegers(4,11,"Month1")); // false
请注意:请注意您的情况,如果使用.Any()
后跟.Contains()
进行处理,则在某些情况下会遇到麻烦,例如lowerBound = 1
,{ {1}}和uppeBound=10
答案 2 :(得分:0)
如果您的所有月份都以数字结尾,那么您可以尝试以下操作,
int startIndex = 4; //I used variables to define starting index and end index
int endIndex = 11;
List<int> numbers = Enumerable.Range(startIndex, (endIndex-startIndex + 1)).ToList();
if (numbers.Any(x => "Month04".EndsWith(x.ToString())))
{
//Your business logic
}
答案 3 :(得分:0)
这是使用正则表达式模式\d+
的另一个示例,它将匹配字符串中的每个数字组(在这种情况下为04
)。然后,我们可以将这些匹配项转换为整数,最后,如果两个整数集合之间存在任何匹配值,Linq表达式Intersect()
和.Any()
将返回true
。
string s = "Month04";
Regex pattern = new Regex(@"\d+");
var numbersInString = pattern.Matches(s).Cast<Match>().Select(x = int.Parse(x.Value));
int lowerBound = 4;
int upperBound = 11;
var range = Enumerable.Range(lowerBound, upperBound - lowerBound + 1);
if (numbersInString.Intersect(range).Any())
{
//Match
}
答案 4 :(得分:0)
这种方式:
int[] numbers = new int[] { 11, 10, 9, 8, 7, 6, 5, 4 };
string str = "Month04";
int number = int.Parse(str.Replace("Month", ""));
if (numbers.Contains(number))
{
Console.WriteLine("YEEE!");
}