0

があり、Listそれを に変換したいDictionaryListaをに変換しても問題はありませんがDictionary、 のキーが存在するかどうかを確認したいのですが、Dictionary存在する場合は無視KeyValuePairして次の文字列に進む必要があります。

これが例です。

IEnumerable<String> readlines = File.ReadAllLines("C:\Text.txt");
List<string> lines = new List<string>();
lines = readlines.ToList();
Dictionary<string, string> keyPair= new Dictionary<string, string>();         
keyPair= test.ToDictionary(s=>s.Split('=')[1], s=>s.Split('=')[0]);  
keyPair.Keys.ToList().Sort();

同じキーが繰り返される場合、ラムダ式は例外をスローし、キーが存在するかどうかを確認し、次の文字列を辞書に変換します。キーの並べ替えが完了したら、辞書をリストに戻します。LINQでそれを行う方法はありますか?

4

2 に答える 2

0

結果をリストとして取得したい場合、それを辞書に入れる理由はありません。

各項目とグループをキーで分割し、グループをキーで並べ替え、グループから必要な値を選択します。私があなたを正しく理解していれば、各キーの最初の値のみが必要です。

List<string> lines = File.ReadAllLines(@"C:\Text.txt").ToList();
lines =
  lines.Select(x => x.Split('='))
  .GroupBy(a => a[0])
  .OrderBy(g => g.Key)
  .Select(g => g.Key + "=" + g.First()[1])
  .ToList();
于 2013-01-16T10:35:09.100 に答える
0

最初にキーでグループ化する

この質問を参照してください: 重複を気にせずに linq を使用してリストを辞書に変換する

このようなものがうまくいくはずです:

var dictionary = lines.GroupBy(s => s.Split('=')[1], x => x.Split('=')[0])
                      .ToDictionary(g => g.Key, g => g.First());

値セレクターのロジックを好みに合わせて変更できます

于 2013-01-16T10:30:26.563 に答える