DataTable
特定の列の値に応じて、プログラムで行数を制限する方法についてのガイダンスを探しています。
take(n)
特定の行数を取得する方法と同様です。
// Returns first 10 rows
dt.Rows.Cast<DataRow>().Take(10).CopyToDataTable();
私がDataTable
4行で持っていたとしましょう
+ ----------------------------------- + ------------ + | Col1 | Col2 | + ----------------------------------- + ------------ + | フレッド| | + ----------------------------------- + ------------ + | ビル| | + ----------------------------------- + ------------ + | ビル| | + ----------------------------------- + ------------ + | BOB | | + ----------------------------------- + ------------ +
このシナリオでtake(2)
は2行が返されますが、Col1の値は行2と3で同じであるため、同様の機能で3を返すようにします。
これはループで最速でしょうか:
var count = 0;
for(int i=0; i < dt.Rows.Count; i++)
{
// add to new DataTable
if(i > 0 && Convert.ToString(dt.Rows[i]["Col1"]) != Convert.ToString(dt.Rows[i-1]["Col1"]))
{
// check next row
count++;
if (count == 10) break;
}
}
または別のより簡単な解決策はありますか?
特定の数に制限された個別の値を探していますが、すべての重複を取得することもできます。
コメントで、「個別の値を特定の数に制限したいのですが、すべての重複を取得します」と述べました。したがって、取得する値の明確な数が制限より大きくなるまで、行を取得する必要があるだけです。そのためには、ハッシュセットが最も簡単なオプションです。複数回追加した場合でも、それぞれの個別の値は1回だけ自動的に設定されます。
var set = new HashSet<string>();
var limit = 2;
var resultingRows = sequence.TakeWhile(row => { set.Add(row[col]); return set.Count <= limit; });
シーケンスが具体化され、その列によって順序付けられていることを確認してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加