Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否删除多元素字符串[]数组中的重复项?_C#_.net_Arrays_.net 4.0 - Fatal编程技术网

C# 是否删除多元素字符串[]数组中的重复项?

C# 是否删除多元素字符串[]数组中的重复项?,c#,.net,arrays,.net-4.0,C#,.net,Arrays,.net 4.0,我有一个字符串[]数组,由\r\n拆分。数组中的每一行都有title | address,但有时我会得到它的address部分的副本,这是我不想要的 这: 将成为: Title1 | Address1 //[0] Title2 | Address2 //[1] Title4 | Address3 //[2] 数组声明如下:string[]resultsArray=results.Split'\r'//Title | Address之后,当我通过|获取单个元素时,我会拆分行 使用极其简化: fo

我有一个字符串[]数组,由\r\n拆分。数组中的每一行都有title | address,但有时我会得到它的address部分的副本,这是我不想要的

这:

将成为:

Title1 | Address1 //[0]
Title2 | Address2 //[1]
Title4 | Address3 //[2]
数组声明如下:string[]resultsArray=results.Split'\r'//Title | Address之后,当我通过|获取单个元素时,我会拆分行

使用极其简化:

foreach (string result in resultsArray)
{
    string splitResult[] = result.Split('|');
    title = splitResult[0];
    address = splitResult[1];
}

我假设问题是,如何防止在列表中输入重复的地址。你能用一把吗


我假设问题是,如何防止在列表中输入重复的地址。你能用一把吗

如果您正在构建IEnumerable的藤,您也可以提供一个独立的投影IEqualityComparerto,但是由于您的示例没有使用它,所以我决定坚持使用经典的过程

如果您正在构建IEnumerable的藤,您也可以提供一个突出的IEqualityComparerto Distinct,但由于您的示例没有使用它,因此我决定坚持使用经典的过程。请尝试以下方法:

resultArray.Select(p => p.Split('|')).Select(p => new { Name = p[0], Address = p[1] }).GroupBy(p => p.Address).Select(p => p.First()).ToArray();
尝试以下方法:

resultArray.Select(p => p.Split('|')).Select(p => new { Name = p[0], Address = p[1] }).GroupBy(p => p.Address).Select(p => p.First()).ToArray();
使用John Skeet的,它变得相当简单:

var comparer = new ProjectionComparer((string input) => input.Split('|')[1]);
var results = resultsArray.Distinct(comparer);
使用John Skeet的,它变得相当简单:

var comparer = new ProjectionComparer((string input) => input.Split('|')[1]);
var results = resultsArray.Distinct(comparer);

因此,如果有重复的地址,您也要删除标题吗?你试过改用字典吗?为什么你删除了标题3而不是标题1?@moriartyn OP问的是一个多元素的问题array@TheScrum Meister哦,谢谢,我应该仔细看看。所以如果有重复的地址,你也想删除标题吗?你试过改用字典吗?为什么你删除了标题3而不是标题1?@moriartyn OP问的是一个多元素的问题array@TheScrum-Meister噢,谢谢,我应该看得更仔细一些。Add方法返回bool以指示该项是否已经在集合中,因此您可以使用if!请参见nitbefore.Addaddress{/*process*/},而不是Contains/Add组合。@LukeH我认为您得到了相反的条件,因为如果Add成功,Add将返回true。但是合并了更改。Add方法返回一个bool来指示该项是否已经在集合中,因此您可以使用if!请参见nitbefore.Addaddress{/*process*/},而不是Contains/Add组合。@LukeH我认为您得到了相反的条件,因为如果Add成功,Add将返回true。不过,考虑到这些变化。是的,你的解释比我的好。最后我用了:如果!resultsList.ExistsdelegateResultsList r{return r.title==splitResult[0];}因为我一直在将结果加载到一个包含其他元素的综合列表中。是的,您的解释比我自己的更好。最后我用了:如果!resultsList.ExistsdelegateResultsList r{return r.title==splitResult[0];},因为我一直在将结果加载到一个包含其他元素的综合列表中。
string[] strings = { "Title1 | Address1", "Title2 | Address2", "Title3 | Address1", "Title4 | Address3" };
var _strings = strings.GroupBy(s => s.Split('|')[1]).Select(g => g.Min(s => s));
var comparer = new ProjectionComparer((string input) => input.Split('|')[1]);
var results = resultsArray.Distinct(comparer);