列のグループのそれぞれが重複している DataTable 内のすべての行を検索したいと考えています。私の現在の考えは、次のように複数回表示されるすべての行のインデックスのリストを取得することです。
public List<int> findDuplicates_New()
{
string[] duplicateCheckFields = { "Name", "City" };
List<int> duplicates = new List<int>();
List<string> rowStrs = new List<string>();
string rowStr;
//convert each datarow to a delimited string and add it to list rowStrs
foreach (DataRow dr in submissionsList.Rows)
{
rowStr = string.Empty;
foreach (DataColumn dc in submissionsList.Columns)
{
//only use the duplicateCheckFields in the string
if (duplicateCheckFields.Contains(dc.ColumnName))
{
rowStr += dr[dc].ToString() + "|";
}
}
rowStrs.Add(rowStr);
}
//count how many of each row string are in the list
//add the string's index (which will match the row's index)
//to the duplicates list if more than 1
for (int c = 0; c < rowStrs.Count; c++)
{
if (rowStrs.Count(str => str == rowStrs[c]) > 1)
{
duplicates.Add(c);
}
}
return duplicates;
}
ただし、これはあまり効率的ではありません。文字列のリストを調べて各文字列の数を取得するには O(n^2) です。このソリューションを見ましたが、複数のフィールドで使用する方法がわかりませんでした。この問題を処理するための安価な方法を探しています。