我有以下字符串列表:
var files = new List<string> {"file0","file1","file2","file3" };
我希望能够将新文件添加到此列表中,但如果插入的文件存在于列表中,我想插入符合以下格式的自定义值$&#34; {StringToBeInserted}& #34;(&#34; {SomeCounter}
例如:尝试添加&#34; file0&#34;和&#34; file0&#34;我已经想插入&#34; file0(1)&#34;。如果我再次尝试添加&#34; file0&#34; ...我想插入&#34; file0(2)&#34;等等...另外,我想提供一致性,例如,如果我删除&#34; file0(1)&#34; ...并尝试再次添加&#34; item0&#34; ......我希望&#34; item0(1)&#34;待补充。有人可以帮助我使用通用算法吗?
答案 0 :(得分:5)
在这种情况下我会使用HashSet<string>
:
var files = new HashSet<string> { "file0", "file1", "file2", "file3" };
string originalFile = "file0";
string file = originalFile;
int counter = 0;
while (!files.Add(file))
{
file = $"{originalFile}({++counter})";
}
如果你必须使用一个列表,结果也应该是一个,你仍然可以使用我的set方法。只需使用您的列表以及files.ToList()
获得的结果列表对其进行初始化。
答案 1 :(得分:1)
好吧,您应该使用您描述的数据结构和包含计数器和输出方法的简单类为它创建自己的自定义类。
void Main()
{
var items = new ItemCountList();
items.AddItem("item0");
items.AddItem("item1");
items.AddItem("item2");
items.AddItem("item0");
items.ShowItems();
}
public class ItemCountList {
private List<SimpleItem> itemList;
public ItemCountList() {
itemList = new List<SimpleItem>();
}
public void DeleteItem(string value) {
var item = itemList.FirstOrDefault(b => b.Value == value);
if (item != null) {
item.Count--;
if (item.Count == 0)
itemList.Remove(item);
}
}
public void AddItem(string value) {
var item = itemList.FirstOrDefault(b => b.Value == value);
if (item != null)
item.Count++;
else
itemList.Add(new SimpleItem {
Value = value,
Count = 1
});
}
public void ShowItems() {
foreach (var a in itemList) {
Console.WriteLine(a.Value + "(" + a.Count + ")");
}
}
}
public class SimpleItem {
public int Count {get; set;}
public string Value {get; set;}
}