相手がC#からSTL/CLRにアクセスするならば
こっちはC++/CLIからLINQにアクセスですよ!
まず、デフォルトではLINQクラスは見えないので、
System.Coreを参照に追加する必要があります。
これで準備完了です。
早速、テストの平均点を求めるプログラムを作ってみます。
ただし、以下の条件を追加します。
・テストの点は0点以上100点以下、それ以外のデータは除外。
・トップとビリの2人の得点は除外。
#include "stdafx.h"
using namespace System;
using namespace System::Linq;
using namespace System::Collections::Generic;
int pipe(int i){return i;}
bool valuecheck(int i){return 0 <= i && i <= 100;}
int main(array<System::String ^> ^args)
{
List<int> ^data = gcnew List<int>();
/* LINQをワシワシと組み立てる! */
IEnumerable<int> ^en;
en = Enumerable::Where<int>(data, gcnew Func<int, bool>(valuecheck));
en = Enumerable::OrderByDescending<int, int>(en, gcnew Func<int, int>(pipe));
en = Enumerable::Skip(en, 1);
en = Enumerable::Reverse(en);
en = Enumerable::Skip(en, 1);
/* で、今更データを突っ込む */
array<int> ^d = gcnew array<int>{100, 60, 61, 57, 87, -1, 56, 67};
data->AddRange(d);
/* 残ったデータは何かな? */
for each(int v in en){
Console::Write(v + " ");
}
Console::Write("\n");
/* 平均はどうだ? */
Console::WriteLine("Average = " + Enumerable::Average(en));
return 0;
}
さて、どうだ!?
どうやら成功したっぽいです。
#ぶっちゃけ、ビミョー