使用 C# 从字符串列表中查找 MAX 数字
本文关键字:查找 MAX 数字 列表 字符串 使用 | 更新日期: 2023-09-27 18:37:22
我有一个字符串列表,其中包含带有数字的字符。我只是想拆分字符串以获取数字,稍后我需要从拆分的数字列表中找到最大数字。
匹配字符串
abc
示例列表值
abc9
abc100
abc999
abc
结果
abc1000
我尝试了以下代码
string Result="";
var SF = (from site in db.SF where site.Code == "xyz" select site.Line2).FirstOrDefault(); // Here I ll get "abc"
int Count = (from Ps in db.Ps where Ps.No.StartsWith(SF) select Ps.No).ToList().Count;
if (Count != 0)
{
var PNo = (from Ps in db.Ps where Ps.No.StartsWith(SF) select Ps.No).ToList().LastOrDefault();
if (PNo != null)
{
int Val = Convert.ToInt32(PNo.Replace(SF, "")) + 1; // Here I need to get `abc1000` based on the above ex. list.
Res = SF + Val.ToString();
}
}
else
{
Result = SF + "1";
}
当我执行代码时,它总是在达到"abc45"后带有"abc10"。任何在提供通用逻辑方面的帮助将不胜感激。
谢谢
尝试以下代码:
var myStrings = new List<string>();
myStrings.Add("abc9");
myStrings.Add("abc100");
myStrings.Add("abc999");
myStrings.Add("abc");
var maxNumber = "abc" + (from myString in myStrings let value = Regex.Match(myString, @"'d+").Value select Convert.ToInt32(value == string.Empty ? "0" : Regex.Match(myString, @"'d+").Value) + 1).Concat(new[] { 0 }).Max();
使用 OrderByDescending()
获取最大数字,然后将+1
添加到结果中
var result = (from Ps in db.Ps
where Ps.No.StartsWith(SF)
select Ps.No)
.OrderByDescending(m => m.PS.No)
.FirstOrDefault();
这个怎么样?我试过了,它似乎做了你所描述的。
public static string testString(string[] input, string startString)
{
int max = 0;
try
{
max = input.Where(s => s.StartsWith(startString) && s.Length > startString.Length)
.Max(s => int.Parse(s.Replace(startString, string.Empty)));
}
catch
{
// no worries, this means max was "abc" without a number
}
return string.Format("{0}{1}", startString, (max + 1).ToString());
}
调用它
string test = testString(new string[] { "abc1", "abc123", "abc23", "xyz23" }, "abc");
尝试下面提到的代码从列表中获取最大数字
var max = myList.Select(v => int.Parse(v.Substring(3))).Max();