我有一个生成文件的任务,所以这是数据示例(来自excel)
A Enr
B Cds
C Cdr
D Der
A Enr
B Cds
我想要的是当您已经找到相同的数据时,例如:如果您已经循环第一行并找到相同的数据(第五行),则第一行是A Enr,第五行是A Enr。 ,我不希望当变量int i = 4时,它将再次循环A Enr来搜索相同的数据,因为它已经从i = 0(第一行中的A ENR)开始搜索
如何有效地执行循环,因为如果使用for语句,则第5行(A)将循环返回以检查相同的数据,这就是我不想要的东西,因为在第1行(A )已循环并在第5行中找到了相同的数据。
代码示例
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]);
}
}
}
}
}
P.S:对语法不好很抱歉,我正在努力提高我的英语水平..
答案 0 :(得分:0)
linq,分组依据,元组听起来很耳熟,为什么不尝试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);
}
答案 1 :(得分:-1)
尝试根据您的不同元素声明一个大小为int / bool的数组(在本示例中为22), 现在,每一行都会增加与您看到的后者相对应的单元格(例如a [x-'A'] ++),并且在每一行上,仅当相应的单元格为0时才进行内部循环。
基本上,只要看到一个字符就作标记,以便下次看到该字符时就知道已经看到了一个字符。
答案 2 :(得分:-1)
假设您要省略重复的数据行,并且唯一需要检查的是行数完全相等(而不仅仅是基于第一个字符),此代码可能会对您有所帮助。它会跟踪列表中的每个找到的值,如果以前已经输出过,则会跳过输出。
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);
}
}