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:

2 つの方法が与えられたので、それらをテストしてみましょう。

コード:

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 のドキュメントと豊富な経験的証拠は、そのような懸念がまったく根拠のないものであることを示唆しています。リストが変更された場合、もちろん、それらの変更は両方のアクセス方法に反映されます。

インデックス アクセス方法は間違いなく*高速ですが、どれだけ軽視したいのですか。10万アクセスのタイミングです。アクセスごとに、わずか数ナノ秒高速です。それは最終的に加算されますが、ほとんどのアプリケーションにとって不要な最適化であり、両方の方法が文字通り同じことをすることになります。

また、これは int 型の List へのアクセスのタイミングのみを示していますが、double、float、および string 型の List をテストしたところ、同様の結果が得られました。リクエストがあれば、それらのバージョンを投稿できます。

*すべての場合において、インデックス アクセス方法の方が高速である必要がありますが、マイレージはハードウェアによって大きく異なります。私のコンピューターのElementAt()および インデックス アクセス方法のアクセス時間は、それぞれ 5.71ns と .27ns です。

于 2012-04-21T01:19:06.760 に答える