从csv中删除C#中重复的数字组合
我正在尝试从csv文件中删除重复的组合 我尝试使用Distinct,但它似乎保持不变从csv中删除C#中重复的数字组合,c#,C#,我正在尝试从csv文件中删除重复的组合 我尝试使用Distinct,但它似乎保持不变 string path; string newcsvpath = @"C:\Documents and Settings\MrGrimm\Desktop\clean.csv"; OpenFileDialog openfileDial = new OpenFileDialog(); if (openfileDial.ShowDialog() == DialogResult.OK) { path = o
string path;
string newcsvpath = @"C:\Documents and Settings\MrGrimm\Desktop\clean.csv";
OpenFileDialog openfileDial = new OpenFileDialog();
if (openfileDial.ShowDialog() == DialogResult.OK)
{
path = openfileDial.FileName;
var lines = File.ReadLines(path);
var grouped = lines.GroupBy(line => string.Join(", ", line.Split(',').Distinct())).ToArray();
var unique = grouped.Select(g => g.First());
var buffer = new StringBuilder();
foreach (var name in unique)
{
string value = name;
buffer.AppendLine(value);
}
File.WriteAllText(newcsvpath ,buffer.ToString());
label5.Text = "Complete";
}
例如,我有一个
{ 1,1,1,1,1,1,1,1 } { 1,1,1,1,1,1,1,2 }
{ 2,1,1,1,1,1,1,1 } { 1,1,1,2,1,1,1,1 }
输出应该是
{ 1,1,1,1,1,1,1,1 }
{ 2,1,1,1,1,1,1,1 }
从你的例子看来,你想把每一行当作一个数字序列,如果一个序列是另一个序列,那么你认为两条线相等。
因此,通过读取您的文件,您可以:var lines = new[]
{
"1,1,1,1,1,1,1,1",
"1,1,1,1,1,1,1,2",
"2,1,1,1,1,1,1,1",
"1,1,1,2,1,1,1,1"
};
现在,让我们将其转换为数字序列数组:
var linesAsNumberSequences = lines.Select(line => line.Split(',')
.Select(int.Parse)
.ToArray())
.ToArray();
或者更好,因为我们对排列不感兴趣,我们可以立即对序列中的数字进行排序:
var linesAsSortedNumberSequences = lines.Select(line => line.Split(',')
.Select(int.Parse)
.OrderBy(number => number)
.ToArray())
.ToArray();
在这个问题上使用Distinct时,我们必须传递一个比较器,该比较器认为两个数组相等,如果它们具有相同的元素。让我们使用来自
var result=linesAsSortedNumberSequences.Distinct(新的IEnumerableComparer());
试试看
HashSet<string> record = new HashSet<string>();
foreach (var row in dtCSV.Rows)
{
StringBuilder textEditor= new StringBuilder();
foreach (string col in columns)
{
textEditor.AppendFormat("[{0}={1}]", col, row[col].ToString());
}
if (!record.Add(textEditor.ToString())
{
}
}
HashSet记录=新的HashSet();
foreach(dtCSV.Rows中的变量行)
{
StringBuilder textEditor=新建StringBuilder();
foreach(列中的字符串列)
{
textEditor.AppendFormat(“[{0}={1}]”,col,row[col].ToString());
}
如果(!record.Add(textEditor.ToString())
{
}
}
HashSet<string> record = new HashSet<string>();
foreach (var row in dtCSV.Rows)
{
StringBuilder textEditor= new StringBuilder();
foreach (string col in columns)
{
textEditor.AppendFormat("[{0}={1}]", col, row[col].ToString());
}
if (!record.Add(textEditor.ToString())
{
}
}