C# 根据项目更改字符串列表

C# 根据项目更改字符串列表,c#,list,list-manipulation,C#,List,List Manipulation,在将列表输出回客户机之前,我有一个要修改的列表问题 为了回答这个问题,我将发布一个列表示例,以及我需要如何查看结果,因为我已经查看了Intersect,除了和我能想到的所有内容,但没有得到我要查找的结果 示例列表: 1,4,6,8 1,2,6,8 2,4,6,8 3,4,5,7 所需结果: 1,4,6,8//第一行 -,2,--//未更改的项目将显示为- 2,4,-- 三、五、七 我真的希望我能解释清楚 如果需要,我很乐意进一步解释 提前谢谢你的建议,到目前为止我已经为此伤了脑筋 我试过的东西太

在将列表输出回客户机之前,我有一个要修改的列表问题

为了回答这个问题,我将发布一个列表示例,以及我需要如何查看结果,因为我已经查看了Intersect,除了和我能想到的所有内容,但没有得到我要查找的结果

示例列表: 1,4,6,8
1,2,6,8
2,4,6,8
3,4,5,7

所需结果: 1,4,6,8//第一行
-,2,--//未更改的项目将显示为-
2,4,--
三、五、七

我真的希望我能解释清楚

如果需要,我很乐意进一步解释

提前谢谢你的建议,到目前为止我已经为此伤了脑筋

我试过的东西太多了,无法在这里输入,所以这里是我到目前为止所做的。只是因为它认为行是不同的,所以不会对数据做任何事情,所以它们保持不变

private List<List<string>> FilterData(List<string[]> datatable)
    {
        List<string> previousRow = new List<string>();
        List<string> currentRow = new List<string>();
        List<string> rowDifferences = new List<string>();

        List<List<string>> resultingDataset = new List<List<string>>();

        foreach (var item in datatable)
        {
            if (previousRow == null)
            {
                previousRow = item.ToList();
                continue;
            }

            currentRow = item.ToList();

            rowDifferences = currentRow.Except(previousRow).ToList();
            resultingDataset.Add(rowDifferences);
        }
        return resultingDataset;
    }
私有列表过滤器数据(列表数据表)
{
List PREVIEWROW=新列表();
List currentRow=新列表();
列表行差异=新列表();
列表结果数据集=新列表();
foreach(数据表中的var项)
{
如果(上一行==null)
{
previousRow=item.ToList();
继续;
}
currentRow=item.ToList();
rowDifferences=currentRow.Exception(previousRow.ToList();
resultingDataset.Add(行差异);
}
返回结果数据集;
}
专用静态列表过滤器数据(列表数据表)
{
var result=新列表();
for(var rowindex=0;rowindex(string)item.Clone()).ToList();
结果。添加(重新绘制);
//第一行无论如何都不会被修改
如果(rowindex==0)继续;
var行=结果[行索引];
//结果的前一行已更改为“-”,因此请使用原始行进行比较
var prevrow=数据表[rowindex-1];
对于(var columnindex=0;columnindex

公共静态列表移除了重复项(此列表项,T replacedValue),其中T:class
{
列表ret=项目;
items.ForEach(m=>{
var ind=项目指数(m);
如果(ind==0)
{
ret.Add(items.FirstOrDefault());
}
其他的
{
var previitem=items.Skip(items.IndexOf(m)-1.FirstOrDefault();
var item=新列表();
对于(var a=0;a
如何使用它:

var items = new List<List<string>>{
    new List<string>{ "1", "4", "6", "8" },
    new List<string>{ "1", "2", "6", "8" },
    new List<string>{ "2", "4", "6", "8" },
    new List<string>{ "3", "4", "5", "7" }
};

var result = items.RemoveDuplicates("-");
var items=新列表{
新名单{“1”、“4”、“6”、“8”},
新名单{“1”、“2”、“6”、“8”},
新名单{“2”、“4”、“6”、“8”},
新名单{“3”、“4”、“5”、“7”}
};
var结果=项目。移除的副本(“-”);

dotNetFiddle:

代码中需要更改的内容很少

以下是代码:

 private List<string[]> FilterData(List<string[]> datatable)
    {
        // List is made of String Array, so need string[] variable not list
        string[] previousRow = null ;
        string[] currentRow;
        string[] rowDifferences ;

        // to store the result
        List<string[]> resultingDataset = new List<string[]>();

        foreach (var item in datatable)
        {
            if (previousRow == null)
            {
                previousRow = item;
                resultingDataset.Add(previousRow); // add first item to list
                continue;
            }

            currentRow = item; 

            // check and replace with "-" if elment exist in previous 
            rowDifferences = currentRow.Select((x, i) => currentRow[i] == previousRow[i] ? "-" : currentRow[i]).ToArray();  
            resultingDataset.Add(rowDifferences);

            // make current as previos
            previousRow = item;
        }
        return resultingDataset;
    }
私有列表过滤器数据(列表数据表)
{
//列表由字符串数组组成,所以需要字符串[]变量而不是列表
字符串[]previousRow=null;
字符串[]当前行;
字符串[]行差异;
//存储结果
列表结果数据集=新列表();
foreach(数据表中的var项)
{
如果(上一行==null)
{
前一行=项目;
resultingDataset.Add(previousRow);//将第一项添加到列表中
继续;
}
currentRow=项目;
//如果以前的版本中存在elment,请检查并替换为“-”
rowDifferences=currentRow.Select((x,i)=>currentRow[i]==previousRow[i]?“-”:currentRow[i]).ToArray();
resultingDataset.Add(行差异);
//将当前设置为previos
前一行=项目;
}
返回结果数据集;
}

检查此项

您尝试过什么吗?你写了一些代码吗?StackOverflow是一个你可以来获得你所写代码帮助的地方,所以你需要先尝试一下,然后发布你的想法,以获得积极的回应。这是4个不同的列表吗?这是一个字符串列表。这是我要解决的第一件事。每个条目都有多个条目,因此值得在数据结构中反映出来。您不希望必须将每个元素解析为一个列表,然后多次重新格式化它。似乎您可能想要一个
列表
列表
,使用
null
int?
表示“未更改”。我知道我已经接近了!看起来这和我的最接近。我会检查所有不同的答案,看看哪一个最适合我。到目前为止,这个看起来像是那个的候选人!的确如此!这是最接近我想要的方式。我无意冒犯其他人,因为他们也有我想要的突变结果,但这段代码坚持我所拥有的。我喜欢这样。
var items = new List<List<string>>{
    new List<string>{ "1", "4", "6", "8" },
    new List<string>{ "1", "2", "6", "8" },
    new List<string>{ "2", "4", "6", "8" },
    new List<string>{ "3", "4", "5", "7" }
};

var result = items.RemoveDuplicates("-");
 private List<string[]> FilterData(List<string[]> datatable)
    {
        // List is made of String Array, so need string[] variable not list
        string[] previousRow = null ;
        string[] currentRow;
        string[] rowDifferences ;

        // to store the result
        List<string[]> resultingDataset = new List<string[]>();

        foreach (var item in datatable)
        {
            if (previousRow == null)
            {
                previousRow = item;
                resultingDataset.Add(previousRow); // add first item to list
                continue;
            }

            currentRow = item; 

            // check and replace with "-" if elment exist in previous 
            rowDifferences = currentRow.Select((x, i) => currentRow[i] == previousRow[i] ? "-" : currentRow[i]).ToArray();  
            resultingDataset.Add(rowDifferences);

            // make current as previos
            previousRow = item;
        }
        return resultingDataset;
    }