我是自学C#并且一直试图弄清楚如何允许用户能够通过输入他们的列表 从列表 中删除项目及其索引编号索引编号或键入单词。
我已经用谷歌搜索并尝试了许多方法来做到这一点,但每次我想出一个方法,它会删除我会选择的元素,但索引并没有消失。示例(列表:0.hat,1.mat,2.fat以及每当我输入“1”或“mat”来删除'mat'时它会将列表显示为0.hat 1.fat并且我想要它显示0.hat,2.fat)
这是我最近尝试过的事情:
string[] stringList = new string[] { "hat", "mat", "fat" };
//Creating list
List<string> list = new List<string>(stringList);
string answer;
//ordering list backwards Z-A
list.Sort((a, b) => -1 * a.CompareTo(b));
//loop to allow them to continue removing items
while (true)
{
//Displaying list to console
for (int i = 0; i < list.Count; i++)
{
//display list
Console.WriteLine("{0}.{1}", i, list[i]);
}
//This is blank
Console.WriteLine();
//instructions what to do
Console.WriteLine("Choose from the list to remove an item: ");
//this will store the users input
answer = Console.ReadLine();
answer = answer.ToLower();
-- this is where I put the removing at --
//Making sure user does not crash program
if (!string.IsNullOrEmpty(answer))
{
var index = list.FindIndex(i => i == answer);
foreach (var item in list)
{
if (index >= 0)
{
list.RemoveAt(index);
}
}
}
我在这里使用的方法不会删除任何内容。 我很难理解。 如果有人能够提供一些很棒的见解。感谢
答案 0 :(得分:1)
您可以通过将字符串传递给.Remove()
方法来删除字符串而无需查找索引。同时删除foreach
循环,因为它是多余的,你没有在那里做任何事情。
if (!string.IsNullOrEmpty(answer))
{
list.Remove(answer);
}
使用Dictionary
您可以访问键或值并根据需要删除。
var list = new Dictionary<int, string>
{
{ 0, "hat" },
{ 1, "mat" },
{ 2, "fat" }
};
var item = list.FirstOrDefault(kvp => kvp.Value == "hat");
// Remove by value
list.Remove(item.Key);
// Remove by key
list.Remove(0);
打印结果
foreach (var kvp in list)
{
Console.WriteLine(kvp.Key + " " + kvp.Value);
}
答案 1 :(得分:1)
不使用list,而是使用dictionary,其中key是item的索引。在这种情况下,当您删除项目时,您将保留项目的原始索引。
答案 2 :(得分:0)
按数据删除
list.Remove(answer);
按索引删除
var index = list.FindIndex(i => i == answer);
list.RemoveAt(index);
答案 3 :(得分:0)
原始问题:
如何&#34;从列表中删除项目及其索引号 输入索引号或在。&#34;
中输入单词
在C#中有很多方法可以做到这一点。甚至有多种类型。你发现了一个,List<T>
,这当然是一种方法,但可能不是最好的方法。你也可以做一个字符串数组。 Systems.Collections.Generic
命名空间中还有其他几种类型的集合,以及List<T>
。
但到目前为止最简单的方法是使用Dict<TKey, TValue>
。
如何?查看我提供的链接中的示例,或执行以下操作:
var a = new Dictionary<int, string>(){
{0, "hat"},
{1, "mat"},
{2, "fat"}
};
a.Remove(0); // remove by key
a.Where(i => i.Value != "mat"); // remove by value