在C#列表中查找重复字符串的索引
我有一个字符串列表:在C#列表中查找重复字符串的索引,c#,arrays,list,C#,Arrays,List,我有一个字符串列表: ["String1"] ["String2"] ["String1"] ["String3"] ["String2"] ["String1"] 我需要在列表中搜索并找到“String1”的索引,并计算“String1”出现的次数。我已经复习过了,但是我对C#中这种类型的编码还不熟悉,我不清楚如何提取索引值,所以如果你能解释一下如何使用这个解决方案,那就太好了 另一个答案中的代码,我将在这里复制以供参考 var duplicates = data .Select((t,
["String1"]
["String2"]
["String1"]
["String3"]
["String2"]
["String1"]
我需要在列表中搜索并找到“String1”的索引,并计算“String1”出现的次数。我已经复习过了,但是我对C#中这种类型的编码还不熟悉,我不清楚如何提取索引值,所以如果你能解释一下如何使用这个解决方案,那就太好了 另一个答案中的代码,我将在这里复制以供参考
var duplicates = data
.Select((t,i) => new { Index = i, Text = t })
.GroupBy(g => g.Text)
.Where(g => g.Count() > 1);
返回的IEnumerable
,其本身是匿名类型的IEnumerable
。您可以从结果中获取索引,如下所示:
foreach(var group in duplicates)
{
Console.WriteLine("Duplicates of {0}:", group.Key)
foreach(var x in group)
{
Console.WriteLine("- Index {0}:", x.Index)
}
}
但是,如果您只想获取索引列表,则可以使用扩展方法:
var duplicateIndexes = data
.Select((t,i) => new { Index = i, Text = t })
.GroupBy(g => g.Text)
.Where(g => g.Count() > 1)
.SelectMany(g => g, (g, x) => x.Index);
这将返回
int
的IEnumerable
。来自另一个答案的代码,我将在这里复制该代码以供参考
var duplicates = data
.Select((t,i) => new { Index = i, Text = t })
.GroupBy(g => g.Text)
.Where(g => g.Count() > 1);
返回的IEnumerable
,其本身是匿名类型的IEnumerable
。您可以从结果中获取索引,如下所示:
foreach(var group in duplicates)
{
Console.WriteLine("Duplicates of {0}:", group.Key)
foreach(var x in group)
{
Console.WriteLine("- Index {0}:", x.Index)
}
}
但是,如果您只想获取索引列表,则可以使用扩展方法:
var duplicateIndexes = data
.Select((t,i) => new { Index = i, Text = t })
.GroupBy(g => g.Text)
.Where(g => g.Count() > 1)
.SelectMany(g => g, (g, x) => x.Index);
这将返回一个
int
的IEnumerable
。首先从答案中理解代码(请参阅下面的注释):
让我们修改它以适应我们的目的:
// Produce an enumeration of Indexes of "String1"
var allString1Indexes = data
// First, add the index to the value by using Select with an anonymous type
.Select((t,i) => new { Index = i, Text = t })
// Keep only the "String1" items
.Where(p => p.Text == "String1")
// Use only indexes
.Select(p => p.Index);
您现在可以迭代结果,并打印“String1”
的所有索引:
从理解答案中的代码开始(见下面我的评论): 让我们修改它以适应我们的目的:
// Produce an enumeration of Indexes of "String1"
var allString1Indexes = data
// First, add the index to the value by using Select with an anonymous type
.Select((t,i) => new { Index = i, Text = t })
// Keep only the "String1" items
.Where(p => p.Text == "String1")
// Use only indexes
.Select(p => p.Index);
您现在可以迭代结果,并打印“String1”
的所有索引:
您可以使用
ToDictionary
方法获取字典
:
在每个
键下
都有一个索引列表,其中字符串实际出现在源代码列表中。您可以使用ToDictionary
方法获取字典
:
在每个
键下都有一个索引列表,其中字符串实际出现在源代码列表中。@Daniel。OP实际上在他自己的问题中提到了这个问题,因此显然需要比它提供的更多的细节。@请在这里标记-作为您的问题。@mark您真的只需要“String1”
的标记,还是要所有字符串的标记?如果您只关心“String1”
,那么使用基本循环有一个更简单的解决方案。@Daniel。OP实际上在他自己的问题中提到了这个问题,因此显然需要比它提供的更多的细节。@请在这里标记-作为您的问题。@mark您真的只需要“String1”
的标记,还是要所有字符串的标记?如果您只关心“String1”
,那么有一个更简单的解决方案,使用基本循环。为什么要投否决票?如果我的答案有错误,我很乐意纠正。它抄袭了另一个问题。@DanielA.White OP的问题是为了更好地理解该代码。我把它复制到这里是为了更好的上下文(因为OP没有把它包括在实际问题中)。这对我来说似乎相当合理,因为我确实提供了一个解决OP具体问题的解释。您希望我只是链接到答案(将来可能会被编辑,破坏这个上下文),还是编辑问题以包含OP所困惑的代码?为什么要投否决票?如果我的答案有错误,我很乐意纠正。它抄袭了另一个问题。@DanielA.White OP的问题是为了更好地理解该代码。我把它复制到这里是为了更好的上下文(因为OP没有把它包括在实际问题中)。这对我来说似乎相当合理,因为我确实提供了一个解决OP具体问题的解释。您希望我只是链接到答案(将来可能会被编辑,破坏这个上下文),还是编辑问题以包含OP所困惑的代码?