1

16個の文字列を含む文字列のリストがあります。ユーザーは、このリストのインデックスが0、5、6、10、15のアイテムを2番目のリストにコピーすることを選択します。

linqでこれを行う方法はありますか?

4

3 に答える 3

3

コレクションにすでにインデックスがあると仮定するとEnumerable.ElementAt、のインデクサーを使用するだけで使用できるためIList<T>、非常に効率的です。

var indices = new List<int>(){ 0,5,6,10,15 };
List<String> result = indices.Select(i => strings.ElementAt(i)).ToList();

新しいリストを作成せずに既存のリストにコピーする場合:

other.AddRange(indices.Select(i => strings.ElementAt(i)));
于 2012-07-26T19:50:23.530 に答える
0

また、Where拡張メソッドの次のオーバーロードを使用できます。

var string_list = new List<string>() { "0", "1", "2", "3", "4", "5" };
var index_list = new List<int>() { 0, 2, 3 };
foreach (string result in string_list.Where((s, i) => index_list.Contains(i)))
    Console.WriteLine(result);
于 2012-07-26T23:35:36.230 に答える
0
var list = new List<string> {"sdf", "sdfsd", "fdgfdgfhg"};
var result = list.Where(x => list.IndexOf(x) == 1 || list.IndexOf(x) == 2).ToList();

しかし、そうすることはお勧めしません。このタスクはlinqに必要です。

于 2012-07-26T19:45:33.783 に答える