C# 如何在C中使用LINQ获取列表中的元素并获取下一项?
在我的应用程序中,我有一个版本列表,它是字符串。 Json结果如下所示:C# 如何在C中使用LINQ获取列表中的元素并获取下一项?,c#,linq,asp.net-core,C#,Linq,Asp.net Core,在我的应用程序中,我有一个版本列表,它是字符串。 Json结果如下所示: [ "v2.9.0", "v2.10.0", "v2.11.0", "v2.12.0", "v2.13.0", "v2.14.0", "v2.15.0", "v2.16.0", "v2.1.0", "v2.2.0" ] 我正在实现升级版本功能。正在将currentVersion升级到targetVersion。逻辑是为ex:如果当前版本是v2
[
"v2.9.0",
"v2.10.0",
"v2.11.0",
"v2.12.0",
"v2.13.0",
"v2.14.0",
"v2.15.0",
"v2.16.0",
"v2.1.0",
"v2.2.0"
]
我正在实现升级版本功能。正在将currentVersion升级到targetVersion。逻辑是为ex:如果当前版本是v2.9.0,它肯定应该升级到2.10.0技巧部分在我们的集合中,我们也有2.1.0
我有一个想法,使用这种方法获取数据,以获得最大值和最小值,但如何获得下一个数字的逻辑,我不知道
var str = ReadLine();
var digitArray = str.Select(x => int.Parse(x.ToString())).ToList();
var min = int.Parse(string.Concat<string>(digitArray.OrderBy(x => x).Select(x =>
x.ToString())));
var max = int.Parse(string.Concat<string>(digitArray.OrderByDescending(x =>
x).Select(x => x.ToString())));
我得到的kubespray类属性的版本列表:
public string Version { get; set; }
正在获取版本列表:
[HttpGet]
public async Task<IActionResult> GetKubesprays()
{
var result = await _context.Kubesprays.Select(x => x.Version).ToListAsync();
return Ok(result);
}
我需要升级我的项目kubeSprayTargetVersion使用kubespray版本列表。
为了节省成本,我使用了以下方法:
[HttpPost("createproject")]
public async Task<IActionResult> CreateProject(ProjectForCreationDto
projectForCreationDto)
{
var name = projectForCreationDto.Name.ToLower().Trim();
var currentVerison = projectForCreationDto.KubesprayCurrentVersion.Trim();
var targetVersion = string.Copy(currentVerison);
if (await _repo.ProjectExists(name))
return BadRequest("Project name already exists");
var projectToCreate = new Project { Name = name, KubesprayCurrentVersion =
currentVerison, KubesprayTargetVersion = targetVersion};
await _repo.CreateProject(projectToCreate);
return StatusCode(201);
}
我需要升级kubeSprayTargetVersion到下一个版本实际上在我的情况下它是未排序的列表首先可能是我当前需要排序它是相同的当前和目标
类似于当前的v2.9.0=>v2.10.0
提前感谢。使用版本时,为什么不使用版本类 结果:
v2.1.0
v2.2.0
v2.9.0
v2.10.0
v2.11.0
v2.12.0
v2.13.0
v2.14.0
v2.15.0
v2.16.0
对数组进行排序后,您可以很容易地发现v2.9.0后面紧跟着v2.10.0等:
许多其他问题的重复。。。从…搜索解决方案的自然排序项。。。你有足够的声誉来结束这个问题
string[] data = new string[] {
"v2.9.0", "v2.10.0", "v2.11.0", "v2.12.0",
"v2.13.0", "v2.14.0", "v2.15.0", "v2.16.0",
"v2.1.0", "v2.2.0"
};
string[] sorted = data
.OrderBy(item => Version.Parse(Regex.Match(item, @"[0-9]+(?:\.[0-9]+)+").Value))
.ToArray();
Console.Write(string.Join(Environment.NewLine, sorted));
v2.1.0
v2.2.0
v2.9.0
v2.10.0
v2.11.0
v2.12.0
v2.13.0
v2.14.0
v2.15.0
v2.16.0
string currentVersion = "v2.9.0";
string nextVersion = sorted[Array.IndexOf(sorted, currentVersion) + 1];