我正在使用c# (使用Visual的.Net4),并试图根据程序中现有的字符串,找出向输入的字符串附加增量数字的算法。做得不太好四处寻找答案。
我有一个List<string>。一个例子就是
{"MyItem (2)", "MyItem", "Other thing", "string here", "MyItem (1)"}因此,假设用户想要向这个列表中添加另一个字符串,他们选择了"MyItem“作为要添加的字符串。因此,给定输入和现有列表,该算法将返回"MyItem (3)“作为要添加的新字符串。
它的功能与Windows资源管理器中的相同,即不断添加新文件夹(“新建文件夹(1)”、“新文件夹(2)”和“打开”)。
我正在尝试循环遍历列表,找出下一个逻辑数字应该是什么,但我被卡住了(代码变得越来越大)。有人知道一种优雅的方法吗?(我对Regex不太在行,所以也许这就是我想要的)
发布于 2014-03-27 21:57:43
这应该是可行的:
var list = new List<string>{"MyItem (2)", "MyItem", "Other thing", "string here", "MyItem (1)"} ;
string str = "MyItem";
string newStr = str;
int i = 0;
while(list.Contains(newStr))
{
i++;
newStr = string.Format("{0} ({1})",str,i);
}
// newStr = "MyItem (3)"发布于 2014-03-27 21:56:11
获取input并搜索它,如果它存在于列表中,则获取计数并连接输入字符串和count +1,否则只需将输入添加到列表中:
var input = Console.ReadLine(); // just for example
if(list.Any(x => x == input))
{
var count = list.Count(x => x == input);
list.Add(string.Format("{0} ({1})", input, count+1);
}
else list.Add(input);发布于 2014-03-27 22:00:51
伪代码:如果列表没有这样的字符串,将其添加到列表中。否则,设置变量N= 1,扫描列表并查找字符串,如给定的字符串+“(*)”(在这里Regex将有所帮助)。如果找到任何字符串,从大括号中取出数字,并将其与N. Set N= MAX(该数字+ 1,N )进行比较。扫描列表后,N包含要添加的数字。因此,将字符串+“(N)”添加到列表中。
https://stackoverflow.com/questions/22699977
复制相似问题