C# 无重复循环的有效循环方法
我有一个生成文件的任务,所以这是数据示例(来自excel) 我想要的是当你已经找到相同的数据时,例如:第一行是Enr,第五行是Enr,如果你已经循环第一行并找到相同的数据(第五行),我不希望当变量int i=4时,它会再次循环A Enr来搜索相同的数据,因为它已经从i=0开始搜索了(哪一个是第一行的A ENR) 如何有效地执行循环,因为如果使用for语句,第5(A)行将被循环回以检查相同的数据,这是我不想要的,因为第1(A)行已循环并在第5行中找到相同的数据 代码示例C# 无重复循环的有效循环方法,c#,C#,我有一个生成文件的任务,所以这是数据示例(来自excel) 我想要的是当你已经找到相同的数据时,例如:第一行是Enr,第五行是Enr,如果你已经循环第一行并找到相同的数据(第五行),我不希望当变量int i=4时,它会再次循环A Enr来搜索相同的数据,因为它已经从i=0开始搜索了(哪一个是第一行的A ENR) 如何有效地执行循环,因为如果使用for语句,第5(A)行将被循环回以检查相同的数据,这是我不想要的,因为第1(A)行已循环并在第5行中找到相同的数据 代码示例 for (int i =
for (int i = 0; i < row; i++)
{
for(int k = 0 ; k < row ;k++)
{
if (fulldatadetail[i][0] == fulldatadetail[k][0])
{
if (!File.Exists(path))
{
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine(fulldatadetail[i][0]);
}
}
else if (File.Exists(path))
{
using (StreamWriter sw = File.AppendText(path))
{
sw.WriteLine(fulldatadetail[i][0]);
}
}
}
}
}
for(int i=0;i|
注意:sry语法不好,我正在努力提高我的英语水平。尝试声明一个int/bool数组,其大小根据您的不同元素而定(在本例中可能为22), 现在,每一行增加与您看到的后一行相对应的单元格(例如[x-'a']++),并且只有当对应的单元格为0时,才在每一行上执行内部循环
因此,基本上只要在看到一个字符时进行标记,这样下次看到它时,您就会知道您已经看到了一个字符。前提是您试图忽略重复的数据行,您需要的唯一检查是行是否完全相等(而不仅仅是基于第一个字符),此代码可能会对您有所帮助。它跟踪列表中找到的每个值,如果以前已经输出过,则跳过输出
string path = @"C:\Some\Text\File.txt";
List<string> outputValues = new List<string>
{
"A Enr",
"B Cds",
"C Cdr",
"D Der",
"A Enr",
"B Cds"
};
List<string> foundValues = new List<string>();
foreach (string outputValue in outputValues)
{
if (foundValues.Contains(outputValue))
continue; // Doesn't output this output value twice
foundValues.Add(outputValue);
using (StreamWriter sw = File.Exists(path) ? File.AppendText(path) : File.CreateText(path))
{
sw.WriteLine(outputValue);
}
}
stringpath=@“C:\Some\Text\File.txt”;
List outputValues=新列表
{
“Enr”,
“B CD”,
“C Cdr”,
“D Der”,
“Enr”,
“B CD”
};
List foundValues=新列表();
foreach(outputValues中的字符串outputValue)
{
if(foundValues.Contains(outputValue))
continue;//不输出此输出值两次
foundValues.Add(outputValue);
正在使用(StreamWriter sw=File.Exists(path)?File.AppendText(path):File.CreateText(path))
{
软件写入线(输出值);
}
}
它是linq、group by、tuple,听起来你很熟悉,为什么不试试GroupBy
// assume index is A,B,C,D
// assume value is Enr,Cds
var result = datas.GroupBy(x=> (x.index, x.value));
use foreach then print your key, your key in IGrouping<T> now is something like Tuple.
Item1 is index, Item2 is value.
foreach(var item in result.ToList())
{
something.Write(item.Key.Item1);
something.WriteLine(item.Key.Item2);
}
//假设索引是A,B,C,D
//假设值为Enr,Cds
var结果=datas.GroupBy(x=>(x.index,x.value));
使用foreach然后打印密钥,现在i分组中的密钥类似于Tuple。
Item1是索引,Item2是值。
foreach(result.ToList()中的var项)
{
写(item.Key.Item1);
something.WriteLine(item.Key.Item2);
}
显示一些代码?我们不知道您在循环什么over@KeithNicholas等等,我先发布一个更优雅的解决方案,它会在foreach循环之外的using块中创建StreamWriter一次。这个解决方案远没有效果,因为它的复杂性是O(n^2)如果您使用哈希表来记录所发现的内容,则效率会更高。
// assume index is A,B,C,D
// assume value is Enr,Cds
var result = datas.GroupBy(x=> (x.index, x.value));
use foreach then print your key, your key in IGrouping<T> now is something like Tuple.
Item1 is index, Item2 is value.
foreach(var item in result.ToList())
{
something.Write(item.Key.Item1);
something.WriteLine(item.Key.Item2);
}