web-dev-qa-db-ja.com

辞書の値を配列に変換します

辞書の値のリストを配列に変換する最も効率的な方法は何ですか?

たとえば、Dictionaryがあり、KeyStringで、ValueFooである場合、Foo[]

VS 2005、C#2.0を使用しています

77
leora
// dict is Dictionary<string, Foo>

Foo[] foos = new Foo[dict.Count];
dict.Values.CopyTo(foos, 0);

// or in C# 3.0:
var foos = dict.Values.ToArray();
116
Matt Hamilton

リストに保存します。それは容易です;

List<Foo> arr = new List<Foo>(dict.Values);

もちろん、配列でそれが特に必要な場合。

Foo[] arr = (new List<Foo>(dict.Values)).ToArray();
11
Steztric

値にはToArray()関数があります。

Foo[] arr = new Foo[dict.Count];    
dict.Values.CopyTo(arr, 0);

しかし、私はそれが効率的だとは思いません(実際に試したことはありませんが、これらすべての値を配列にコピーすると思います)。本当に配列が必要ですか?そうでない場合は、IEnumerableを渡そうとします。

IEnumerable<Foo> foos = dict.Values;
5
Grzenio

Linqを使用する場合は、次を試してください。

Dictionary<string, object> dict = new Dictionary<string, object>();
var arr = dict.Select(z => z.Value).ToArray();

どちらが速いか、良いかわかりません。両方とも私のために働く。

4
Piotr Czyż

最近では、LINQを使用できるようになったら、辞書キーとその値を単一の文字列に変換できます。

次のコードを使用できます。

// convert the dictionary to an array of strings
string[] strArray = dict.Select(x => ("Key: " + x.Key + ", Value: " + x.Value)).ToArray();

// convert a string array to a single string
string result = String.Join(", ", strArray);
1
Lior Kirshner