C#控制台编号列表不确定如何调用列表中项目的索引

时间:2017-07-02 02:09:22

标签: c#

我无法为我的代码编写一个编号列表,我希望它看起来像这样: 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();

4 个答案:

答案 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)的顺序,这是不好的。

您需要在遍历列表时跟踪项目编号。 foreachfor不同,因为没有隐式索引。

您可以使用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);
                      });