0

我得到了这个示例列表<>

List<string> pizzas = new List<string>();
pizzas.Add("Angus Steakhouse");
pizzas.Add("Belly Buster");
pizzas.Add("Pizza Bianca");
pizzas.Add("Classic Cheese");
pizzas.Add("Friday Special");

我只想知道如何使用索引返回字符串?

就像示例一样,我将输入“1”,它会返回“Belly Buster”

多谢你们!

4

5 回答 5

3

您应该能够使用:

pizzas[1]
于 2012-04-21T01:14:02.837 回答
3
var str = pizzas[1]; //Tada!!!!
于 2012-04-21T01:14:34.043 回答
1

如果您只想访问特定元素并取回字符串,您可以这样做:

List<string> pizzas = new List<string>();
pizzas.Add("Angus Steakhouse");
pizzas.Add("Belly Buster");
pizzas.Add("Pizza Bianca");
pizzas.Add("Classic Cheese");
pizzas.Add("Friday Special");

string result = pizzas[1]; // result is equal to "Belly Buster"

如果您想实际输入数据并返回结果,例如控制台应用程序,您可以执行以下操作:

Console.Write("Index: ");
int index = Int32.Parse(Console.ReadLine());

Console.WriteLine("You selected {0}.", pizzas[index]);

这样做的原因是因为 List(T) 实现了所谓的索引器。这是一个特殊属性,可让您使用类似数组的语法访问对象。.NET BCL 中的大多数通用集合都有索引器。

于 2012-04-21T01:19:30.473 回答
1

由于您的列表是字符串类型,因此您可以像这样直接将其分配给字符串类型变量。

字符串 str = 比萨[1];// str = 肚皮克星

于 2012-04-21T01:19:34.633 回答
0

您也可以这样做,但看起来以前的帖子也是正确的。

for(int i = 0; i < pizzas.Count; i++)
    Console.WriteLine(pizzas.ElementAt(i));
Console.ReadLine();

编辑1:

如果不明显,您想要的特定索引 (1) 将按如下方式访问:

string pizza = pizzas.ElementAt(1);

编辑2:

错误的代码。见编辑 3。

编辑3:

给定这两种方法,让我们测试它们。

代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;

namespace ElementAtOrIndex
{
    class Program
    {
        // Declare/initialize static variables.
        static Stopwatch timer = new Stopwatch();
        static List<long> ElementAtTimes = new List<long>();
        static List<long> IndexTimes = new List<long>();

        static void Main(string[] args)
        {
            // Declare/initialize variables.
            int count = 100000;
            int iterations = 1000;

            // Just initializes a list with elements from 0 to count.
            // Slower than for loops, but pithy for an example on SO.
            List<int> list = Enumerable.Range(0, count).ToList<int>();

            // Assert that both methods are equal.
            for (int i = 0; i < list.Count; i++)
            {
                if (list.ElementAt(i) != list[i])
                {
                    Console.WriteLine("Both methods are not equal!");
                    Environment.Exit(1);
                }
            }
            Console.WriteLine("Both methods are equal!");

            // Time ElementAt access *iterations* times by copying into a variable.
            for (int i = 0; i < iterations; i++)
            {
                // [Re]start the timer.
                timer.Reset();
                timer.Start();

                int temp;
                for (int j = 0; j < list.Count; j++)
                    temp = list.ElementAt(j);

                // Note the time. 
                ElementAtTimes.Add(timer.ElapsedTicks);
            }

            // Time Index access *iterations* times by copying into a variable.
            for (int i = 0; i < iterations; i++)
            {
                // [Re]start the timer.
                timer.Reset();
                timer.Start();

                int temp;
                for (int j = 0; j < list.Count; j++)
                    temp = list[j];

                // Note the time. 
                IndexTimes.Add(timer.ElapsedTicks);
            }

            // Output times.
            Console.WriteLine("Average time for ElementAt access: {0} ns", ElementAtTimes.Average() / count * 100);
            Console.WriteLine("Average time for Index access: {0} ns", IndexTimes.Average() / count * 100);

            Console.ReadLine();
        }
    }
}

测试:

http://goo.gl/Tf10R

输出:

Both methods are equal!
Average time for ElementAt access: 25.101014 ns
Average time for Index access: 12.961065 ns

评论:

当涉及到错误时,MSDN 文档和大量经验证据表明,这种担忧是完全没有根据的。如果列表发生更改,那么这些更改当然会通过两种访问方法反映出来。

索引访问方法肯定更快,但我想淡化多少。这是 100,000 次访问的计时。通过访问访问,它只快了几纳秒。这最终会加起来,但对于大多数应用程序来说是不必要的优化,而且这两种方法最终都会做同样的事情。

此外,虽然这仅显示了访问 int 类型列表的时间,但我已经测试了 double、float 和 string 类型的列表,结果相似。如果需要,我可以发布这些版本。

*索引访问方法在所有情况下都应该更快,但里程因硬件而异。我的计算机对ElementAt()和索引访问方法的访问时间分别为 5.71ns 和 0.27ns。

于 2012-04-21T01:19:06.760 回答