2009-09-06 16 views
26

文字列の配列を文字列の辞書に変換するための組み込み関数がありますか、ここでループを行う必要がありますか?文字列の配列を文字列の辞書に変換する最もエレガントな方法

+0

に依存あなたはすべてのことを望んでいます。あなたはそれを見ていてもループは終わります。 –

+3

どこかには常にループがありますが、LINQではそのコードを隠すことができます。つまり、あなたの*コードにループを入れる必要はありません。 –

答えて

63

あなたは、あなたが辞書に任意の配列(すなわちIEnumerable<T>)を変えることができ、.NET 3.5を使用していると仮定すると、キーと値。項目自体が目的の値であれば、キーに使用される1つの投影だけを指​​定できます。あなたが元に各文字列の大文字バージョンをマップしたい場合

したがって、たとえば、あなたが使用できます。

var dictionary = strings.ToDictionary(x => x.ToUpper()); 

をあなたのケースでは、キーと値がために何をしたいですか?

あなたが実際にちょうどは(あなたはそれが例えば、特定の文字列が含まれているかどうかを確認することができます)を設定したい場合は、使用することができます。

var words = new HashSet<string>(listOfStrings); 
+0

重複するキーを前にチェックしない限り、riscは常にそこにあります。 – Dykam

+0

@Dykam:確かに。重複を処理したい場合は、代わりに 'ToLookup'が必要です。営業担当者が実際に何をしようとしているのかを説明すればもっと分かるはずです。 –

+0

クール!もし私が同じ長さの値の文字列配列とキー配列を持っていたら? Linqは私を助けることができますか? –

3

どういう意味ですか?

辞書はハッシュで、キーは値にマップされます。

あなたのキーとは何ですか?あなたの価値は何ですか?

var dictionary = sequence.ToDictionary(item => item.Key, 
             item => item.Value) 

KeyValueは、あなたのように行動したい適切なプロパティです:

foreach(var entry in myStringArray) 
    myDictionary.Add(????, entry); 
12

あなたがこれを行うには、LINQを使用することができ、

using System.Linq; 

string[] myArray = new[] { "A", "B", "C" }; 
myArray.ToDictionary(key => key, value => value); 

結果、このような辞書です:

しかしアンドリューは最初に答えられるべきで尋ねる質問は(あなたのキーと値はどのようなもの)
4

あなたが値を持たない辞書が必要な場合は、HashSetが必要になる場合があります。

IMO
var hashset = new HashSet<string>(stringsArray); 
2

、我々は、我々はそのインデックスを呼び出して値を取得できる値のリストについて話しているArrayを言います(value => array [index])ので、正しい辞書はキーのインデックスを持つ辞書です。

そして@ジョンスキートのおかげで、それを達成するための適切な方法は次のとおりです。

var dictionary = array 
    .Select((v, i) => new {Key = i, Value = v}) 
    .ToDictionary(o => o.Key, o => o.Value); 

もう一つの方法は、次のように拡張メソッドを使用することです:

public static Dictionary<int, T> ToDictionary<T>(this IEnumerable<T> array) 
{ 
    return array 
     .Select((v, i) => new {Key = i, Value = v}) 
     .ToDictionary(o => o.Key, o => o.Value); 
} 
+0

これはa)非効率的です。 b)同じ値が配列内で複数回出現すると失敗します。より効率的かつ確実にこれを行うために、インデックスを提供する 'Select'オーバーロードを使用することもできます。 –

+0

ありがとう、 'Select'を使うために参照したコードを編集します;)。 –

関連する問題