我无法为我的代码编写一个编号列表,我希望它看起来像这样: 1 - 鱼 2 - 豆类 3 - 车
inventoryList.Add"Fish";
inventoryList.Add"Beans";
inventoryList.Add"Car";
foreach (string item in inventoryList)
{
Console.WriteLine((item.IndexOf(item) + 1) + " - " + item);
}
Console.ReadLine();
答案 0 :(得分:0)
您应该在字符串列表中调用IndexOf
方法。
Console.WriteLine((inventoryList.IndexOf(item) + 1) + " - " + item);
由于您只想为列表中的项目打印计数器,因此您可以避免对列表中的IndexOf
调用,只需将其替换为本地计数器变量即可。 IndexOf
方法必须使用列表中每个项目中的每个字符检查字符串项目中的每个字符,从而执行可能的 n * m 复杂操作
var counter = 0;
foreach (string item in inventoryList)
{
Console.WriteLine(++counter + " - " + item);
}
答案 1 :(得分:0)
我建议不要使用IndexOf
,因为它在O(n)
时间内运行,所以在列表迭代中,它将是O(n*n)
的顺序,这是不好的。
您需要在遍历列表时跟踪项目编号。 foreach
与for
不同,因为没有隐式索引。
您可以使用Linq的.Select( item, index )
重载,或自行跟踪:
foreach( var pair in inventoryList.Select( (e,i) => new { Index = i, Value = e } )
{
Console.WriteLine( "{0} - {1}", pair.Index + 1, pair.Value );
}
或者:
Int32 index = 0;
foreach( String item in inventoryList )
{
Console.WriteLine( "{0} - {1}", index + 1, item );
index++;
}
或者:
for( Int32 i = 0; i < inventoryList.Count; i++ )
{
Console.WriteLine( "{0} - {1}", i + 1, inventoryList[i] );
}
答案 2 :(得分:0)
在列表中使用indexOf不是一个好的选择,请尝试这种方式。
IndexOf方法执行线性搜索;因此,这种方法是一种 O(n)运算,其中n是元素数。
inventoryList.Add"Fish"; inventoryList.Add"Beans"; inventoryList.Add"Car";
var index = 1;
foreach (string item in inventoryList) {
Console.WriteLine(index + " - " + item);
index++;
}
Console.ReadLine();
答案 3 :(得分:0)
使用Linq尝试此操作:
inventoryList.Select((item, index) => new { Index = index, Name = item })
.ToList()
.ForEach(it =>
{
Console.WriteLine("{0} - {1}", it.Index + 1, it.Name);
});